{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "7.hyperparameter-tuning.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "code",
      "metadata": {
        "id": "WjpiZA317zYc",
        "colab_type": "code",
        "outputId": "2cf1287a-062d-450c-ce16-c214189e6384",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 884
        }
      },
      "source": [
        "!pip install git+https://github.com/keras-team/keras-tuner\n",
        "# !pip uninstall tensorflow -y\n",
        "# !pip install tensorflow-gpu\n",
        "!pip install gdown"
      ],
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting git+https://github.com/keras-team/keras-tuner\n",
            "  Cloning https://github.com/keras-team/keras-tuner to /tmp/pip-req-build-11m2bb_7\n",
            "  Running command git clone -q https://github.com/keras-team/keras-tuner /tmp/pip-req-build-11m2bb_7\n",
            "Requirement already satisfied (use --upgrade to upgrade): keras-tuner==0.9.1 from git+https://github.com/keras-team/keras-tuner in /usr/local/lib/python3.6/dist-packages\n",
            "Requirement already satisfied: tensorflow>=2.0.0-beta1 in /usr/local/lib/python3.6/dist-packages (from keras-tuner==0.9.1) (2.0.0)\n",
            "Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from keras-tuner==0.9.1) (1.16.5)\n",
            "Requirement already satisfied: tabulate in /usr/local/lib/python3.6/dist-packages (from keras-tuner==0.9.1) (0.8.5)\n",
            "Requirement already satisfied: terminaltables in /usr/local/lib/python3.6/dist-packages (from keras-tuner==0.9.1) (3.1.0)\n",
            "Requirement already satisfied: colorama in /usr/local/lib/python3.6/dist-packages (from keras-tuner==0.9.1) (0.4.1)\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from keras-tuner==0.9.1) (4.28.1)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from keras-tuner==0.9.1) (2.21.0)\n",
            "Requirement already satisfied: psutil in /usr/local/lib/python3.6/dist-packages (from keras-tuner==0.9.1) (5.4.8)\n",
            "Requirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from keras-tuner==0.9.1) (1.3.1)\n",
            "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.6/dist-packages (from keras-tuner==0.9.1) (0.21.3)\n",
            "Requirement already satisfied: wrapt>=1.11.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (1.11.2)\n",
            "Requirement already satisfied: wheel>=0.26 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (0.33.6)\n",
            "Requirement already satisfied: opt-einsum>=2.3.2 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (3.1.0)\n",
            "Requirement already satisfied: protobuf>=3.6.1 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (3.10.0)\n",
            "Requirement already satisfied: tensorflow-estimator<2.1.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (2.0.1)\n",
            "Requirement already satisfied: absl-py>=0.7.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (0.8.1)\n",
            "Requirement already satisfied: termcolor>=1.1.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (1.1.0)\n",
            "Requirement already satisfied: keras-preprocessing>=1.0.5 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (1.1.0)\n",
            "Requirement already satisfied: grpcio>=1.8.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (1.15.0)\n",
            "Requirement already satisfied: keras-applications>=1.0.8 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (1.0.8)\n",
            "Requirement already satisfied: google-pasta>=0.1.6 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (0.1.7)\n",
            "Requirement already satisfied: six>=1.10.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (1.12.0)\n",
            "Requirement already satisfied: gast==0.2.2 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (0.2.2)\n",
            "Requirement already satisfied: tensorboard<2.1.0,>=2.0.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (2.0.0)\n",
            "Requirement already satisfied: astor>=0.6.0 in /usr/local/lib/python3.6/dist-packages (from tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (0.8.0)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->keras-tuner==0.9.1) (2019.9.11)\n",
            "Requirement already satisfied: urllib3<1.25,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->keras-tuner==0.9.1) (1.24.3)\n",
            "Requirement already satisfied: idna<2.9,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->keras-tuner==0.9.1) (2.8)\n",
            "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->keras-tuner==0.9.1) (3.0.4)\n",
            "Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.6/dist-packages (from scikit-learn->keras-tuner==0.9.1) (0.14.0)\n",
            "Requirement already satisfied: setuptools in /usr/local/lib/python3.6/dist-packages (from protobuf>=3.6.1->tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (41.2.0)\n",
            "Requirement already satisfied: h5py in /usr/local/lib/python3.6/dist-packages (from keras-applications>=1.0.8->tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (2.8.0)\n",
            "Requirement already satisfied: werkzeug>=0.11.15 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (0.16.0)\n",
            "Requirement already satisfied: markdown>=2.6.8 in /usr/local/lib/python3.6/dist-packages (from tensorboard<2.1.0,>=2.0.0->tensorflow>=2.0.0-beta1->keras-tuner==0.9.1) (3.1.1)\n",
            "Building wheels for collected packages: keras-tuner\n",
            "  Building wheel for keras-tuner (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for keras-tuner: filename=keras_tuner-0.9.1-cp36-none-any.whl size=85887 sha256=cbd6effeea683e7e7bf0c1f41ebc453363e8f4f156bc04d486a398eb78098648\n",
            "  Stored in directory: /tmp/pip-ephem-wheel-cache-vg86sw5y/wheels/6c/55/2d/6e178386cb7a2d7da5a7059752a2b58791705c9c8718c5f07a\n",
            "Successfully built keras-tuner\n",
            "Requirement already satisfied: gdown in /usr/local/lib/python3.6/dist-packages (3.6.4)\n",
            "Requirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from gdown) (4.28.1)\n",
            "Requirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from gdown) (2.21.0)\n",
            "Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from gdown) (1.12.0)\n",
            "Requirement already satisfied: idna<2.9,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->gdown) (2.8)\n",
            "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->gdown) (2019.9.11)\n",
            "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->gdown) (3.0.4)\n",
            "Requirement already satisfied: urllib3<1.25,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->gdown) (1.24.3)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "t8SXXG-t7-Uw",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import os\n",
        "import numpy as np\n",
        "import tensorflow as tf\n",
        "from tensorflow import keras\n",
        "import pandas as pd\n",
        "import seaborn as sns\n",
        "from pylab import rcParams\n",
        "import matplotlib.pyplot as plt\n",
        "from matplotlib import rc\n",
        "from sklearn.model_selection import train_test_split\n",
        "from pprint import pprint\n",
        "from kerastuner.tuners import RandomSearch, BayesianOptimization\n",
        "\n",
        "%matplotlib inline\n",
        "%config InlineBackend.figure_format='retina'\n",
        "\n",
        "sns.set(style='whitegrid', palette='muted', font_scale=1.5)\n",
        "\n",
        "rcParams['figure.figsize'] = 16, 10\n",
        "\n",
        "RANDOM_SEED = 42\n",
        "\n",
        "np.random.seed(RANDOM_SEED)\n",
        "tf.random.set_seed(RANDOM_SEED)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Z9wwB5DN_VjF",
        "colab_type": "code",
        "outputId": "58ee9afc-d50a-4187-d324-c90130a1775c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 85
        }
      },
      "source": [
        "!gdown --id 1uWHjZ3y9XZKpcJ4fkSwjQJ-VDbZS-7xi --output titanic.csv"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Downloading...\n",
            "From: https://drive.google.com/uc?id=1uWHjZ3y9XZKpcJ4fkSwjQJ-VDbZS-7xi\n",
            "To: /content/titanic.csv\n",
            "\r  0% 0.00/61.2k [00:00<?, ?B/s]\r100% 61.2k/61.2k [00:00<00:00, 21.6MB/s]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Lz3WaZwx_dUZ",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "df = pd.read_csv('titanic.csv')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "V44-lOn25DRo",
        "colab_type": "code",
        "outputId": "cd66fa10-178b-4d7f-9dc4-df5a74d9715b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "df.shape"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(891, 12)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 5
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UzanDMEC_lcv",
        "colab_type": "code",
        "outputId": "3808ea58-4b04-4f78-f890-3593934b9558",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 68
        }
      },
      "source": [
        "df.columns"
      ],
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',\n",
              "       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],\n",
              "      dtype='object')"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vB3zl8caCW-9",
        "colab_type": "text"
      },
      "source": [
        "# Exploration"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DwO4z_hX_pxZ",
        "colab_type": "code",
        "outputId": "7e9490d0-c8cb-4971-e10c-d77eb635e378",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 625
        }
      },
      "source": [
        "sns.countplot(df.Survived);"
      ],
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAB5gAAATACAYAAAAla5srAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3V9s1Wf9wPGPLbSkawA3uoHbEiqV\nOnFkblDCojKVbMsMGNSpGTHGMJcZQdTIhSHjApeYOZHo1JD5P8rEf7C4m801RgJRkbGNKCQVoXWm\nKwvIChwKbaH9XejvpIRCP9BzetC+XgnJc3qe59Mn3DXvfM95w+Dg4GAAAAAAAAAAwAiqKn0BAAAA\nAAAAAP47CMwAAAAAAAAApAjMAAAAAAAAAKQIzAAAAAAAAACkCMwAAAAAAAAApAjMAAAAAAAAAKQI\nzAAAAAAAAACkCMwAAAAAAAAApAjMAAAAAAAAAKQIzAAAAAAAAACkCMwAAAAAAAAApAjMAAAAAAAA\nAKQIzAAAAAAAAACkCMwAAAAAAAAApAjMAAAAAAAAAKQIzAAAAAAAAACkCMwAAAAAAAAApAjMAAAA\nAAAAAKRMqPQFuPrt378/ent7o7q6Omprayt9HQAAAAAAACCht7c3zp07F7W1tfG2t72tJDMFZkbU\n29sbAwMDMTAwEP39/ZW+DgAAAAAAAHAZent7SzZLYGZE1dXVMTAwEFVVVVFXV1fp6wAAAAAAAAAJ\nPT09MTAwENXV1SWbKTAzotra2ujv74+6urpobm6u9HUAAAAAAACAhLa2tigUCiX9Gtyqkk0CAAAA\nAAAA4H+awAwAAAAAAABAisAMAAAAAAAAQIrADAAAAAAAAECKwAwAAAAAAABAisAMAAAAAAAAQIrA\nDAAAAAAAAECKwAwAAAAAAABAisAMAAAAAAAAQIrADAAAAAAAAECKwAwAAAAAAABAisAMAAAAAAAA\nQIrADAAAAAAAAECKwAwAAAAAAABAisAMAAAAAAAAQIrADAAAAAAAAECKwAwAAAAAAABAisAMAAAA\nAAAAQIrADAAAAAAAAECKwAwAAAAAAABAisAMAAAAAAAAQIrADAAAAAAAAECKwAwAAAAAAABAisAM\nAAAAAAAAQIrADAAAAAAAAECKwAwAAAAAAABAisAMAAAAAAAAQIrADAAAAAAAAECKwAwAAAAAAABA\nisAMAAAAAAAAQIrADAAAAAAAAECKwAwAAAAAAABAisAMAAAAAAAAQIrADAAAAAAAAECKwAwAAAAA\nAABAisAMAAAAAAAAQIrADAAAAAAAAECKwAwAAAAAAABAisAMAAAAAAAAQIrADAAAAAAAAECKwAwA\nAAAAAABAisAMAAAAAAAAQIrADAAAAAAAAECKwAwAAAAAAABAisAMAAAAAAAAQIrADAAAAAAAAECK\nwAwAAAAAAABAisAMAAAAAAAAQIrADAAAAAAAAECKwAwAAAAAAABAyoRKXwA43wPrfl/pKwAAwFXj\nqfV3VfoKAAAAwBCeYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAA\nAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAG\nAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAg\nRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAA\nAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYA\nAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBF\nYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAA\nACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAA\nAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVg\nBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAA\nIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAA\nAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAGAAAAAAAAIEVgBgAAAAAAACBFYAYAAAAAAAAgRWAG\n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\nFApRX18fzc3Nlb7O/7wH1v2+0lcAAICrxlPr76r0FQAAAOC/Vjk6n0dfAQAAAAAAAEgRmAEAAAAA\nAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEA\nAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgR\nmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAA\nAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAA\nAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGY\nAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAA\nSBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAA\nAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgB\nAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABI\nEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAA\nAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEA\nAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgR\nmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAA\nAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAA\nAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGY\nAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAA\nSBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAA\nAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgB\nAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABI\nEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAA\nAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEA\nAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgR\nmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAA\nAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAA\nAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGY\nAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAA\nSBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAA\nAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgB\nAAAAAAAASJlQ6QtcbVatWhW//e1vi69bWlriJz/5SepsoVCIbdu2xXPPPRcdHR1x/PjxuO6662LW\nrFlx3333xZIlS6Kmpuay7lOOmQAAAAAAAABXQmAeorW19by4fDleeOGFWLNmTbz66qvn/byrqyu6\nurpi586d8eMf/zg2btwYs2bNqthMAAAAAAAAgCvlI7L/o1AoxPr166/o7L59++JTn/pUMQRPnDgx\n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\nSBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAA\nAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgB\nAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABI\nEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAA\nAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEA\nAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgR\nmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAA\nAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAQAAAAAAAEgRmAEAAAAAAABIEZgBAAAAAAAASBGYAfg/\n9u492Kryvv/4Z3M5IB65o9B4gYCgYhMvgEo1ajXa2oohVdtqMgZNqcZL0hpNa4Yk1WonNdZYtUaj\nYi5NrRrQtpoYyUxovIQgihg1IBcDQUhErscDHoT9+6M/9kC4PcDZHBJerxnGtfZ+1nc9439n3rPW\nBgAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAA\nRQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAA\nAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARTq09QYAAAAA9gazvvKJtt4CAADsUQZ/9oG23gI7wRPM\nAAAAAAAAABQRmAEAAAAAAAAoIjADAAAAAAAAUERgBgAAAAAAAKCIwAwAAAAAAABAEYEZAAAAAAAA\ngCICMwAAAAAAAABFBGYAAAAAAAAAigjMAAAAAAAAABQRmAEAAAAAAAAoIjADAAAAAAAAUERgBgAA\nAAAAAKCIwAwAAAAAAABAEYEZAAAAAAAAgCICMwAAAAAAAABFBGYAAAAAAAAAigjMAAAAAAAAABQR\nmAEAAAAAAAAoIjADAAAAAAAAUERgBgAAAAAAAKCIwAwAAAAAAABAEYEZAAAAAAAAgCICMwAAAAAA\nAABFBGYAAAAAAAAAigjMAAAAAAAAABQRmAEAAAAAAAAoIjADAAAAAAAAUERgBgAAAAAAAKCIwAwA\nAAAAAABAEYEZAAAAAAAAgCJqOZgLAAAgAElEQVQCMwAAAAAAAABFBGYAAAAAAAAAigjMAAAAAAAA\nABQRmAEAAAAAAAAoIjADAAAAAAAAUERgBgAAAAAAAKCIwAwAAAAAAABAEYEZAAAAAAAAgCICMwAA\nAAAAAABFBGYAAAAAAAAAigjMAAAAAAAAABQRmAEAAAAAAAAoIjADAAAAAAAAUERgBgAAAAAAAKCI\nwAwAAAAAAABAEYEZAAAAAAAAgCICMwAAAAAAAABFBGYAAAAAAAAAigjMAAAAAAAAABQRmAEAAAAA\nAAAoIjADAAAAAAAAUERgBgAAAAAAAKBIh3oOv+OOO5IkhxxySM4+++ydmvHEE09k7ty5SZIrrrii\n1fYGAAAAAAAAwI6pe2CuVCo58cQTdzowP/744/nhD3+YSqUiMAMAAAAAAAC0Ia/IBgAAAAAAAKCI\nwAwAAAAAAABAkT0+MK9ZsyZJ0qlTpzbeCQAAAAAAAMDebY8PzHPmzEmSdO3atY13AgAAAAAAALB3\n69DWG9iapqamPPDAA1m8eHEqlUoGDRrU1lsCAAAAAAAA2Ku1WmA+7bTTtvrd1KlTt/n9xqrVat59\n990sXbp0k88/9KEP7dL+AAAAAAAAANg1rRaYFy5cmEqlstnn1Wo1a9asyZtvvlk8q1qtJklt3vve\n976cd955rbNRAAAAAAAAAHZKq/4Gc7Va3eTftr7b1r8N2rdvnzPPPDP//u//nn333bc1twoAAAAA\nAADADmq1J5j/6Z/+aZPzarWa6667LpVKJYceemjGjBlTNKdSqaRLly7p06dPhgwZki5durTWFgEA\nAAAAAADYBa0WmEePHr3ZZ9ddd12S5IADDtji9wAAAAAAAAD89mi1wLwlw4cPT5IMGTKknrcBAAAA\nAAAAYDeoa2D+1re+Vc/xO2Xp0qV54YUXMmPGjMyaNSvz58/Pr3/96zQ3N6ehoSHdunXLkCFDMnLk\nyIwaNSo9e/Ysnt3U1JSJEyfmySefzBtvvJEVK1akV69eGThwYM4666ycffbZaWho2KH91mMmAAAA\nAAAAwM6oa2DeE/393/99fvSjH23xu9WrV2f16tVZvHhxJk+enNtuuy1XX311Pvaxj2137vPPP59r\nrrkmb7755iafL1q0KIsWLcrTTz+db3zjG7n11lszcODAor3WYyYAAAAAAADAztrrAvPGNjwJ3K9f\nv+yzzz5ZvXp15s6dm1deeSXr169Pc3NzbrjhhixZsiSf+cxntjrnlVdeyV/91V+lubk5SdKxY8ec\ncMIJ2X///bNgwYJMnTo169evz8yZM3PRRRflkUceSd++fbe5t3rMBAAAAAAAANgVuz0wV6vVLFiw\nICtXrsyaNWtSrVaLr93wm867YsSIEfnDP/zDjBw5MgcddNAW1/zyl7/MF7/4xTz99NNJkq997Ws5\n9dRT88EPfnCztS0tLbnyyitrIXjo0KH5t3/7t01i7+zZs3PppZdmwYIFeeutt/LZz3423/72t7e6\nx3rMBAAAAAAAANhVuy0w/8///E+++93vZvr06VmzZs0OX1+pVPLqq6/u8j4uueSS7a458MADc9dd\nd+UjH/lI5syZk2q1mocffniLgfk///M/s3DhwiRJ9+7d8/Wvfz29evXaZM2gQYPyta99LaNHj05L\nS0umTp2ayZMn5+STT97i/esxEwAAAAAAAGBXtav3DZYvX54LL7ww11xzTX7yk59k9erVqVarO/Tk\n8o6ubw0NDQ05++yza+dbi9vf+c53aseXXHLJZiF4g0GDBmX06NG18//4j//Y6r3rMRMAAAAAAABg\nV9U1MK9fvz5jx47NtGnTthiJN3y2vX9tpUePHrXjd955Z7Pv582bl7lz59bON469W7Lx988+++xu\nmwkAAAAAAADQGur6iuxHH300M2bMSKVSSbVazcCBA3PRRRdl+PDh6du3b/bZZ5963n6XzZkzp3Z8\n4IEHbvb9lClTascDBgxInz59tjnv93//99OlS5c0Nzfn3XffzfTp0/MHf/AHdZ8JAAAAAAAA0Brq\n+gTz9773vdrxKaeckkcffTTnn39+BgwYsMfH5dmzZ+eRRx6pnX/4wx/ebM3GAXro0KHbndmhQ4cM\nHjx4i9fXcyYAAAAAAABAa6jrE8yvvfZakqR9+/a58cYb07Fjx3rebpc1Nzdn/vz5mTRpUsaPH5/m\n5uYkyTHHHJNzzz13s/VvvPFG7bhfv35F9+jbt2/teN68ebtlJgAAAAAAAEBrqGtgXrFiRSqVSgYP\n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\nKpVcddVV9dwqAAAAAAAAANvRod43+OIXv5gZM2bkV7/6VarVar7zne/koYceyrHHHpsjjzwyvXr1\nSkNDQ5qamjJv3rz89Kc/zaJFi1KtVlOpVFKpVHLFFVfk8MMPr/dWAQAAAAAAANiGugfmXr165e67\n785ll12WN998M0mydu3aTJkyJVOmTNlsfbVa3eR4zJgx+dSnPlXvbQIAAAAAAACwHXV9RfYGQ4YM\nyYQJEzJq1Ki0a/d/t9zw2uwNfvP84IMPzu23357Pfe5zu2OLAAAAAAAAAGxH3Z9g3qB79+7553/+\n51x11VV54oknMnXq1MyZMycrVqzIu+++m27duqVPnz456qijctJJJ+XUU0+txWgAAAAAAAAA2t5u\nC8wbHHjggRk7dmzGjh27u28NAAAAAAAAwC7wiDAAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAU\nEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAA\nAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAM\nAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAA\nKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAA\nAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGB\nGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAA\nAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAA\nAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAi\nAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAA\nAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgB\nAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAA\nRQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAA\nAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIw\nAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAA\nAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAA\nAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBE\nYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAA\nAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFCkQ1tvoC3Mnj07Tz/9dF544YXMmjUrv/71r9PS0pLGxsYc\ndNBBGTZsWM4999wMHDhwh+YuWbIkEyZMyFNPPZWFCxdm1apV6dOnTw4//PCcffbZOeOMM9Ku3Y41\n/XrMBAAAAAAAANgZe1VgfuaZZ3LTTTdl9uzZW/x+2bJlWbZsWWbMmJH7778/5513Xq677rp06dJl\nu7MnTZqUz3/+81m+fPkmny9cuDALFy7MpEmTMmLEiHzlK1/JAQccULTfeswEAAAAAAAA2Fl7VWB+\n5ZVXNonL7dq1y2GHHZZDDjkkXbt2zVtvvZXnn38+K1euTJI8/PDDmTt3bu6///507tx5q3MnT56c\nq666KuvWrUuSdOnSJSeccEK6d++euXPn5sUXX0yS/PSnP80ll1ySBx98MI2Njdvcaz1mAgAAAAAA\nAOyKvSowb3DEEUfk/PPPz1lnnZVu3bpt8l1zc3PuuOOO3HfffUmSadOm5bbbbsvnPve5Lc5aunRp\n/vZv/7YWgk866aTccsstm8x9/vnnc8UVV2TZsmV5/fXXc8MNN+TLX/7yVvdXj5kAAAAAAAAAu2qv\n+vHe/v37584778zEiRPzl3/5l5vF5eT/nhS+9tprc9FFF9U++9a3vpVVq1ZtceY999yTpqamTeb/\n5txhw4blX/7lX2rn//Vf/5XXX399q/usx0wAAAAAAACAXbVXBeYzzjgjp59+etHaK6+8Mh07dkyS\nrF27Ns8999xma9auXZtHHnmkdv7pT386nTp12uK8kSNH5sQTT0ySrF+/Pg8++OAW19VjJgAAAAAA\nAEBr2KsC847Yb7/9cuihh9bOFy5cuNmaKVOm1J5sbmxs3G68Hj16dO140qRJW1xTj5kAAAAAAAAA\nrUFg3oZKpVI73vB7yBubMmVK7fioo45KQ0PDNueNGDGidrx48eK88cYbu2UmAAAAAAAAQGsQmLei\npaVlk1jbr1+/zdbMmTOndjx06NDtztx///3Tp0+fLV5fz5kAAAAAAAAArUFg3oonn3wy77zzTpL/\ne5L5+OOP32zN9gL0lvTt27d2PG/evN0yEwAAAAAAAKA1CMxbsGbNmtx666218zPPPDO9evXabN3y\n5ctrx7179y6avfG6FStW7JaZAAAAAAAAAK2hQ1tvYE904403ZuHChUmSzp075zOf+cwW1zU3N9eO\nO3XqVDS7c+fOW7y+njNbS1NTU6ZNm1a3+Xu7Y489tq23AAAAeyx/i/DbzN97AACwbf7m++3iCebf\n8PDDD+ehhx6qnV977bUZMGDAFte+++67teOOHTsWzW9oaKgdr1mzZrfMBAAAAAAAAGgNnmDeyNNP\nP51/+Id/qJ2fffbZufDCC7e6vlOnTlm9enWSZO3atUX3aGlpqR1v/ORxPWe2lsbGxgwZMqRu8wEA\nALbGE6AAAAC/u/zNVz8zZ85MU1NTq870BPP/99JLL+XKK6+sRd0TTzwxN9100zav6dKlS+144yeP\nt2XjJ4w3vr6eMwEAAAAAAABag8CcZNasWRk7dmzt94uPOuqo3H777Zu8enpLunXrVjtesmRJ0b3e\nfvvtLV5fz5kAAAAAAAAArWGvD8y/+MUvcvHFF2f58uVJksGDB+eee+4pehJ4499mXrRoUdH9Nl63\npd92rsdMAAAAAAAAgNawVwfmRYsWZcyYMXnrrbeSJP3798/48eOLnwIeOHBg7fjVV1/d7vq33nqr\ndq/fvL6eMwEAAAAAAABaw14bmN9+++184hOfyMKFC5Mk/fr1y/jx49O7d+/iGccdd1ztePr06bXf\nb96aqVOn1o779u2b/v3775aZAAAAAAAAAK1hrwzMK1asyJgxY/LGG28kSXr37p3x48fn937v93Zo\nzogRI9LY2JgkWbVqVSZNmrTN9RMnTqwdn3baabttJgAAAAAAAEBr2OsCc3Nzc8aOHZuZM2cmSbp1\n65b77rtvp367uKGhIeedd17t/F//9V/T0tKyxbU/+clP8uMf/zhJ0q5du/zFX/zFbpsJAAAAAAAA\n0Br2qsDc0tKST33qU4e0v2MAACAASURBVJk+fXqSpEuXLvn617+eww47bKdnjh07tvbE8dy5c3PF\nFVdk5cqVm6yZNm1a/uZv/ibVajVJMmrUqAwePHi3zgQAAAAAAADYVR3aegO701e/+tU899xztfNB\ngwblsccey2OPPbbdaz/4wQ/mnHPO2ezznj175pZbbslll12W9evXZ/LkyTn55JMzcuTIdOvWLXPn\nzs2LL764yT3HjRu3zXvVYyYAAAAAAADArtqrAvPSpUs3OZ8xY0ZmzJhRdG1zc/MWA3OSnHLKKbnt\nttsybty4LF++PM3NzVv87eThw4fnlltuqT2dvC31mAkAAAAAAACwK/aqwFxPZ5xxRo455ph897vf\nzVNPPZWFCxemqakpffr0yZAhQzJq1KiceeaZadeu/K3k9ZgJAAAAAAAAsLMq1Q0/4gtbMXPmzDQ1\nNaWxsTFDhgxp6+38zrvgCz9q6y0AAMAe4zvXn9LWW4BWM+srn2jrLQAAwB5l8GcfaOst/M6rR+fz\n6CsAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAA\nAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgB\nAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAA\nRQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAA\nAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIw\nAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAA\nAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAA\nAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBE\nYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAA\nAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMA\nAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAAAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACg\niMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRmAAAAAAAAAIoIzAAAAAAAAAAUEZgBAAAA\nAAAAKCIwAwAAAAAAAFBEYAYAAAAAAACgiMAMAAAAAAAAQBGBGQAAAAAAAIAiAjMAAAAAAAAARQRm\nAAAA4P+xd//BVVd34v9f/EiwARcKBIO4KxEKKBZEEUQtVGzFoiD05462dXfdqu3q0t3ROk7LfLfj\njt26uuy6rdNZaruOttZpCwhqoaBdZoVKgRG0IKCBVAwgRAwSEpIA+fzB+v7eSIQD3JCQPB5/nfe9\n533uCcw4Zp6c9wUAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIw\nAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAA\nAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAA\nAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBE\nYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAA\nAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMA\nAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAg\nicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAA\nAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRm\nAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAA\nQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAA\nAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJII\nzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAA\nAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYA\nAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAk\nEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAA\nAAAASbq29gZaQ319fWzYsCFeffXVWLt2bbzyyitRXl4ejY2NERFxxx13xJ133nnc61ZWVsacOXNi\n8eLFUVFREXv37o3i4uI4//zzY8qUKXHNNddE587H1/RbYk0AAAAAAACAE9HhAvO8efNi5syZUV9f\nn9d1lyxZEt/+9rejqqqqyesVFRVRUVERS5YsiTFjxsSDDz4YZ511VqutCQAAAAAAAHCiOtzR16qq\nqrzH5aVLl8bf//3fZyG4qKgorr766vjc5z4Xo0aNyub94Q9/iFtuuSWqq6tbZU0AAAAAAACAk9Hh\nTjC/r3///jFixIgYOXJkjBw5Mh588MF4+eWXj3ud3bt3xz/+4z/GwYMHIyLiE5/4RDz00EPRs2fP\nbM6qVavijjvuiHfffTdef/31uO++++L73//+KV0TAAAAAAAA4GR1uBPM1157bbz44ovxP//zP/Hw\nww/HLbfcEqNHj46CgoITWu+//uu/stPDAwcOjB/+8IdNQnBExOjRo+Pf/u3fsuv58+fH66+/fkrX\nBAAAAAAAADhZHS4wl5SURHFxcV7WamhoiF/96lfZ9YwZM6Jbt27Nzr388svjyiuvjIiIQ4cOxS9+\n8YtTtiYAAAAAAABAPnS4wJxPK1asiL1790ZERI8ePeJTn/rUUedPnz49Gy9ZsuSUrQkAAAAAAACQ\nDwLzSVixYkU2vuiii6KwsPCo88eMGZONd+zYEeXl5adkTQAAAAAAAIB8EJhPQllZWTYePnz4Mef3\n69evyeO5c+9vyTUBAAAAAAAA8kFgPgm5p4X79++fdE9JSUk23rJlyylZEwAAAAAAACAfBOaTUFVV\nlY379u2bdE/uvD179pySNQEAAAAAAADyoWtrb+B0VlNTk427deuWdM8ZZ5zR7P0tuWa+VFdXx+rV\nq1ts/Y7ukksuae0tAABAm+V3EU5nft8DAICj8zvf6cUJ5pNQV1eXjQsKCpLuKSwszMb79+8/JWsC\nAAAAAAAA5IMTzCehW7duUVtbGxERDQ0NSffU19dn49yTxy25Zr706NEjhg4d2mLrAwAAfBgnQAEA\nANovv/O1nI0bN0Z1dXVe13SC+SQUFRVl49yTx0eTe8I49/6WXBMAAAAAAAAgHwTmk9CzZ89sXFlZ\nmXTPO++80+z9LbkmAAAAAAAAQD4IzCehtLQ0G2/fvj3pntx5ufe35JoAAAAAAAAA+SAwn4RBgwZl\n4/Xr1x9z/q5du2LXrl3N3t+SawIAAAAAAADkg8B8EsaOHZuN16xZEw0NDUedv3LlymxcUlISAwcO\nPCVrAgAAAAAAAOSDwHwSxowZEz169IiIiL1798aSJUuOOn/u3LnZ+Oqrrz5lawIAAAAAAADkg8B8\nEgoLC+MLX/hCdv3www9HfX19s3Nfeuml+N///d+IiOjcuXP85V/+5SlbEwAAAAAAACAfBOaTdOut\nt2Ynjjdv3hx33HFHvPfee03mrF69Ov7hH/4hGhsbIyJi6tSpMWTIkFO6JgAAAAAAAMDJ6traG2gN\nN9xwwxGvvfnmm9n4F7/4xRGPpu7Xr1/Mnj37iPt69+4dDz30UHz961+PQ4cOxdKlS2PChAlx+eWX\nR8+ePWPz5s3x8ssvZ/MHDx4cM2fOPOr+WmJNAAAAAAAAgJPVIQPzhg0bjvp+ZWVlVFZWNnlt7969\nHzr/k5/8ZPzHf/xHzJw5M6qqqqKmpqbZ706+9NJL46GHHspOJx9NS6wJAAAAAAAAcDI6ZGBuCddc\nc01cfPHF8etf/zoWL14cFRUVUV1dHcXFxTF06NCYOnVqTJo0KTp3Tn8qeUusCQAAAAAAAHCiOmRg\n3rhxY4us27dv37jtttvitttua9NrAgAAAAAAAJwIR18BAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAA\nAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgB\nAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAA\nSQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAA\nAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIw\nAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAA\nAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAA\nAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBE\nYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAA\nAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMA\nAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAg\nicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAA\nAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRm\nAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAA\nQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAA\nAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJII\nzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAA\nAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYA\nAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAk\nEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAA\nAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAM\nAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAA\nSCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAA\nAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKB\nGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAA\nAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAA\nAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAk\nAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgBAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAA\nAAAgicAMAAAAAAAAQBKBGQAAAAAAAIAkAjMAAAAAAAAASQRmAAAAAAAAAJIIzAAAAAAAAAAkEZgB\nAAAAAAAASCIwAwAAAAAAAJBEYAYAAAAAAAAgSdfW3gDHVl1dHXPnzo1FixZFeXl57NmzJ/r06ROD\nBg2KyZMnx5QpU6KwsLC1twkAAAAAAAC0cwJzG7dq1aq4++67Y9u2bU1e3759e2zfvj1efPHFeOyx\nx2LWrFkxaNCgVtolAAAAAAAA0BF4RHYbtm7duvja176WxeWCgoIYP358fP7zn4+xY8dG586H//o2\n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\n166rq4uFCxdm18d7evl9Y8aMiQEDBmSP0Z43b17cddddx7zv6aefzsbjx4+P3r17HzGnuro6vv71\nr2dr9+rVK2bMmBHTpk1rckK5trY2fvazn8W///u/R0NDQ6xbty7+6Z/+KR588MFmP7uioiLuvffe\nLBqfeeaZce+998bUqVOjoKAgIiIaGhrimWeeifvvvz9WrlwZZWVliX8iAAAA7Z8TzAAAALQ7V155\nZQwYMCC73rlzZ3zxi1+Mm2++OZ544onYsGFDmz+Vum/fvvjsZz8bP/jBD5rE5YiIoqKiKC4ujoiI\nP//zP49LLrkkey833n6Y559/Pvbu3RsREV27do0pU6ac0B47deoUU6dOza4XLFgQhw4dOuo9O3fu\njN///vfZ9YfF7X/913+N8vLyiIgoKSmJX//613HjjTce8fjrj3zkI/G3f/u38cgjj0Tnzp2zfbzy\nyivNrvvAAw9ETU1NREQUFhbG7Nmz43Of+1wWlyMOn5KePn16/PjHP45u3brF7t27j/ozAQAAdCQC\nMwAAAO1OYWFhPPDAA00en9zY2BgvvfRS3HfffXHDDTfExRdfHF/84hfjn//5n2PhwoVZcG0revfu\nHd/5zneiU6dOx5ybG2mXLFlyzEdE5z4e+xOf+ET06dPnhPeZ+9k7duyIl1566ajz58+fn8X9Xr16\nxSc/+ckj5uzatSv7bueIiH/5l3+Jc84556jrjh8/vsl3OT/xxBNHzNm5c2csWbIku7755ptj1KhR\nH7rmyJEj46//+q+P+rkAAAAdjcAMAABAuzR69Oh48skn42Mf+1iz7+/fvz/Wrl0bjz/+eMyYMSOu\nuOKKuOuuu2LLli2neKfNu/7666N79+5Jcz/zmc9Et27dIuLwz5X7+OsPqqysbPKd1Cf6eOz3DRw4\nsMkjyXPjdXNyT1hfd911Tf4RwPueffbZqK+vj4iICy64IMaNG5e0l9zAnHtK+n0vvPBCHDhwICIO\nn77+8pe/fMw1b7rppujSpUvS5wMAAHQEAjMAAADt1oUXXhjz58+Phx9+OK666qoswjanrq4uFixY\nENdff3089thjp3CXzbv00kuT55555plx9dVXZ9dHe0z2M888k0XWnj17xsSJE098k/8nN1IvXrw4\newT1B61fvz42bdrU7H25Vq5cmY0vv/zy5H0MGzYsG+/cuTPefvvtJu+vXbs2G3/sYx+LkpKSY67Z\nr1+/OP/885P3AAAA0N51be0NAAAAQEvq3LlzTJo0KSZNmhT19fXxyiuvxKuvvhqvvfZarF27Nvue\n3/cdOHAg7r///ujcuXN85StfaZ1Nx+HvVj4e06ZNi+eeey4iDgfaioqKJt9D/b7cE8af+cxnmj1B\nfLwmT54c999/f9TX10dNTU389re/bTYe5372eeedFyNGjGh2vY0bN2bj3/3ud7Fhw4YT2te7774b\nZ511Vnad+3c9ZMiQ5HWGDBkSf/zjH09oDwAAAO2NwAwAAECHUVhYGKNHj47Ro0dnr23bti3mzZsX\n//3f/x179uzJXn/ggQfi05/+dNIp15bQo0eP45p/5ZVXRnFxcezatSsaGxvj6aefjm984xtN5mza\ntClee+217PpkH4/9vp49e8ZVV10VixYtiojDIfmDax84cCCeffbZpM+uqqrKxmVlZVFWVnZC+/rg\n92q/99572fijH/1o8jq9evU6oc8HAABojzwiGwAAgA7t7LPPjm984xuxYMGCKC0tzV6vr6+PX/3q\nV622r06dOh3X/C5dusT111+fXTf3mOy5c+dm44EDB8aoUaNOfIMfkBuMV6xYETt27Gjy/osvvhiV\nlZURcfhU+Q033PCha9XW1uZlT4cOHWpy3dDQkI0LCgqS18nHKW8AAID2wglmAAAAiIizzjorvvvd\n78ZXv/rV7LVVq1blZe2DBw/mZZ1jmTZtWvz0pz+NiMOPg167dm2MHDkyIg7H1meeeabJ3HwaP358\n9O7dO3bv3h2HDh2K+fPnx6233pq9nxu8L7vssqOeDD/zzDPj3XffjYiIe++9N/7qr/4qL3vMPRW+\nb9++5PuOZy4AAEB75wQzAAAA/J8xY8ZEUVFRdr1z584m73/w1OuBAweS1s19NHNLGjZsWAwbNiy7\nzv3O4+XLl2c/T6dOnY56gvhEdO3atckJ6vnz52fj6urqeP7557PrY312cXFxNn7/1HM+9OnTJxu/\n9dZbyfdt3bo1b3sAAAA43QnMAAAA8H86deoU3bt3z667dOnS5P0Pfi9y7nc2f5itW7dGTU1NfjaY\nIPdk8nPPPRf19fUR0TQ2jxkzJs4+++wW/ezXX389/vjHP0ZExG9+85uoq6uLiIiioqK45pprjrpO\n7qO716xZk7f9DR8+PBuvW7cu6R8IHDp0KPs5AAAAEJgBAAAgU1VVFe+880523a9fvybvd+/ePXr1\n6pVdb9y48ZhrLl68OH8bTDBlypTo2vXwN2JVVVXF0qVLY9++fbFkyZJsTr4fj/2+4cOHx5AhQ7Lr\n96N2btyeNGlSk1PizRk/fnw2Xr16dWzevDkv+xszZkw2rqqqimXLlh3znuXLl+f1FDUAAMDpTmAG\nAACg3fnDH/5wQo81fvzxx+PQoUPZ9eWXX37EnAsvvDAbP/fcc0ddb/fu3fGTn/zkuPdxMvr27RtX\nXHFFdj1v3rxYtGhR1NbWRsThE8STJk1qsc/Pffz1s88+G+Xl5bF69erstZS4PXHixCgtLY2IwyeI\nZ86cGQ0NDSe9t8suuywGDBiQXc+aNeuop5gPHDgQs2bNOunPBQAAaE8EZgAAANqdZcuWxbXXXhv3\n3HNPrFy5MhobG486/+DBg/Hoo4/GI488kr3Wvfv/a+/+QnP++ziOv+ZP2J/8IptRDqSJRU6WcYBi\nSpmI2oEjf9vBjpzYOOJsSjmRE0dYaTlYa2U5U2QHSmQtYmkKS1tqYcbyO7ktfuZ22X3vd99+PR5n\n1/f7+X6v63MdXs++76sk9fX13639Os7euXPnm6dzvzY0NJTGxsa8fv16iruYuq8j7s2bN3PlypWJ\n13V1dd+MAf9vq6+vnxgtPjw8nObm5onvf+nSpVm/fv1P7zFjxoy0tLSkqKgoSXL37t0cPnw4g4OD\nP732yZMnOX36dC5evDjpfY8ePTrxuq+vL8ePH58YI/61sbGxnDhxwnhsAACAv5j1v/4AAAAAMB0+\nffqUjo6OdHR0pLKyMjU1NVm7dm0qKyvzxx9/ZHx8PENDQ+nt7c2NGzcyMDDwzfUtLS3fjchOkp07\nd+bChQt58eJFkqS5uTm3b99OXV1dFixYkDdv3uTu3bu5du1aRkZGsnHjxvT39+fVq1d/y76TZOvW\nrSkrK8vIyEg+fvyY3t7eiXPTNR77i4qKimzYsCG3bt1Kkty7d2/iXH19/UQ0/pnNmzfn2LFjOXv2\nbJKkp6cn27Zty/bt21NbW5vKysrMnTs3b9++zeDgYPr6+tLT0zMxTrupqWnS+zY0NOT69evp6elJ\nknR1deXhw4dpaGjIypUrU1RUlEePHqW9vT39/f2ZM2dONm3a9LePOgcAAPh/JTADAADwj/PlCdov\nXr58mc7OznR2dv702uLi4pw8eTL79u374fkzZ87kyJEjef/+fT5//vzDe1dXV+fcuXPZs2fP1DYy\nRXPmzMmOHTvS3t7+zfHFixentrZ22t9/9+7dE4H5r8d/xdGjR7Nw4cKcOnUqHz58yNjYWLq6utLV\n1TXlz1ZUVJTz58/nwIEDefDgQZLk2bNnaW1t/W7trFmzcvr06Tx//lxgBgAA+BcjsgEAAPjHaWpq\nSltbWw4ePJjq6urvgvNkKioqcuDAgXR3d/8wLn9RU1OTy5cvZ82aNZOeLykpycGDB3P16tXMnz9/\nSnv4T00Wc3ft2pUZM6b/p4C6urqUlpZ+c2zdunUT/6v8K/bu3Zvu7u7s378/ZWVl/3ZtcXFxtmzZ\nktbW1hw6dOiH60pLS9PW1pbGxsYUFxdPumbVqlW5dOnStD/xDQAA8Lsp+vyzP6ICAACA39y7d+/y\n5MmTDAwMZGhoKO/evcvMmTNTUlKS8vLyVFVVZdmyZQWPb/7a48ePc//+/QwPD6ekpCRLlixJbW3t\nD8MlUzc+Pp7e3t48ffo0b968yejoaObNm5dFixZl+fLlWbFiRWbPnv1L9xwdHc2dO3fy/PnzjI6O\npry8PKtXr05VVdU07QIAAOD3JjADAAAAAAAAUBAjsgEAAAAAAAAoiMAMAAAAAAAAQEEEZgAAAAAA\nAAAKIjADAAAAAAAAUBCBGQAAAAAAAICCCMwAAAAAAAAAFERgBgAAAAAAAKAgAjMAAAAAAAAABRGY\nAQAAAAAAACiIwAwAAAAAAABAQQRmAAAAAAAAAAoiMAMAAAAAAABQEIEZAAAAAAAAgIIIzAAAAAAA\nAAAURGAGAAAAAAAAoCACMwAAAAAAAAAFEZgBAAAAAAAAKIjADAAAAAAAAEBBBGYAAAAAAAAACvIn\nVTExhEWtXLYAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 1152x720 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "image/png": {
              "width": 972,
              "height": 608
            }
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wp_omOmRIdpC",
        "colab_type": "code",
        "outputId": "02542836-d156-4169-e7f5-1c38645e5184",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 625
        }
      },
      "source": [
        "sns.distplot(df.Fare);"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAB40AAATACAYAAADk7NGHAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3XuM1eWdP/DP3IeLFR1QUGjlIoi0\nkYZaS5pi03bVJb3ZYrupjW5ibVwqtbvVPyqyLG7abC/RjdCuu9WuEmPbbH9I282mtNXEahsR8YJF\nFhQG5VYUZMBhrpxzfn+wHM7hMucy35lzhnm9/nq+M8/3eZ6xybd/vPk8n5pMJpMJAAAAAAAAAIal\n2kofAAAAAAAAAIDKERoDAAAAAAAADGNCYwAAAAAAAIBhTGgMAAAAAAAAMIwJjQEAAAAAAACGMaEx\nAAAAAAAAwDAmNAYAAAAAAAAYxoTGAAAAAAAAAMOY0BgAAAAAAABgGBMaAwAAAAAAAAxjQmMAAAAA\nAACAYUxoDAAAAAAAADCMCY0BAAAAAAAAhjGhMQAAAAAAAMAwJjQGAAAAAAAAGMaExgAAAAAAAADD\nmNAYAAAAAAAAYBgTGgMAAAAAAAAMY/WVPgCV88orr0R3d3fU1dVFU1NTpY8DAAAAAAAAFNDd3R2p\nVCqampri0ksvTWRNofEw1t3dHel0OtLpdPT29lb6OAAAAAAAAECRuru7E1tLaDyM1dXVRTqdjtra\n2hg5cmSlj8MAam9vj4iI0aNHV/gkAH3zvQKGEt8sYKjwvQKGEt8sYKjwvaKSOjo6Ip1OR11dXWJr\nCo2Hsaampujt7Y2RI0fGjBkzKn0cBtD69esjIvzvDFQ93ytgKPHNAoYK3ytgKPHNAoYK3ysqafPm\nzdHe3p5o+9naxFYCAAAAAAAAYMgRGgMAAAAAAAAMY0JjAAAAAAAAgGFMaAwAAAAAAAAwjNUPxKLt\n7e3x2GOPxZo1a2L79u1x8ODBaGlpialTp8b8+fPjU5/6VDQ2Ng7E1vHUU0/F6tWr4+WXX469e/dG\nc3NzXHDBBXHllVfGggULYuLEif3e44knnoi/+7u/y/vZ448/XtLag3FOAAAAAAAAgEISD42fe+65\nuOOOO2L37t15P9+zZ0/s2bMnnn766Xj44Yfj3nvvjalTpya276FDh2Lx4sXx29/+Nu/nXV1d0dbW\nFq+88ko89NBDceedd8YXvvCFsvdpb2+PZcuWVf05AQAAAAAAAIqRaGi8cePGuPnmm6OjoyMiIhoa\nGmLu3Llx3nnnxY4dO2LdunWRTqdj8+bNceONN8YvfvGLGD9+fL/37enpiYULF8a6deuyP7vkkkti\n5syZ0dHREWvXro22trbo7OyMJUuWRE1NTVx33XVl7XXvvffGX/7yl6o/JwAAAAAAAEAxEguNe3p6\nYtGiRdnAeNasWfGjH/0oLxR+7bXX4pZbbokdO3bEW2+9Fbfffns88sgj/d57xYoV2SB2xIgR8b3v\nfS+uuuqq7O87Ozvj7rvvjlWrVkVExLJly2LOnDkxZcqUkvZ56aWX4tFHH42IiE9+8pPx3//931V5\nTgAAAAAAAIBi1Sa10M9//vPYtWtXRESMGTMmfvzjH59URTxt2rS4//77s/2M161bF08++WS/9t23\nb1+sXLky+3zXXXflBbERRwPa73znO3H55ZdHRERvb2/cd999Je3T29sbd911V6TT6Zg4cWIsXLiw\nKs8JAAAAAAAAUIrEQuNjFbgRETfddFO0tLScct60adPi2muvzT7/9Kc/7de+q1atis7OzoiImDp1\naixYsOCU82pqauL222/PPq9Zsyb2799f9D4PPPBAbNmyJSIili5dGk1NTVV5TgAAAAAAAIBSJBIa\nt7a2xrZt27LPuaHwqeT+/k9/+lMcPny47L2feOKJ7Pizn/1sn3Nnz54dF110UUREpNPpvHf7sn37\n9vi3f/u3iIi45pprYt68eVV5TgAAAAAAAIBSJRIar127NjuePHlyjBs3rs/573vf+2LkyJEREdHd\n3R0vvvhiWft2dXXFSy+9lH3+4Ac/WPCdK664Ijt+5plnitpnyZIl0d3dHaNHj44777yzas8JAAAA\nAAAAUKpEQuOtW7dmx7NmzSo4v76+PqZPn37K90vR2toa6XQ6Io5e6zxz5syC71x66aXZcW519On8\n13/9Vzz77LMREfH3f//3cf7551flOQEAAAAAAADKkUhovH379ux4woQJRb0zfvz47Li1tbWsfXPf\na2lpKarPcO75Cu27b9+++P73vx8REe9973vjS1/6UlWeEwAAAAAAAKBciYTGbW1t2fHYsWOLeif3\nCuuDBw/2e9+Wlpai3sk9X2dnZ/T09Jx27re//e04ePBg1NXVxd133x21teX95xrocwIAAAAAAACU\n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\nb72VHZd71XaunTt3xjvvvJN9HjduXL/XhCQk0dO4UU9jAAAAAACAqpLY9dTHqnYzmUysXr26z/mP\nPfZYdjx37twYNWpU2Xt/7GMfy45/+ctf9jl3w4YNsW3btoiIqK2tzXu3XL29vfHHP/4x+1xu1XSu\nVatWZcejRo2KSy+9tN9rQhJn0qnyAAAgAElEQVSS6GncpKcxAAAAAABAVUkkNI6I+NKXvpQdP/jg\ng/H222+fct7WrVvzQtHc98px7bXXZq9vfvXVV/MC6VyZTCa+//3vZ5+vvvrqaGlpOWnekSNHor29\nvej9V6xYEXv37s0+f+ITnzhpTk9PT1H9liOOBtsPPvhg9nn+/PlRX19f9HlgIOlpDAAAAAAAcOZJ\nLDT+4he/GBdeeGFERLz99tvx1a9+NS9MjTgaGN9yyy3R3d0dERGXX355XHnlladcb/ny5TFjxoyY\nMWNGnxXB48aNixtuuCH7fPfdd8fvf//7vDldXV2xePHi7PXVDQ0N8fWvf/2U63V0dMTHP/7xWLFi\nRbzxxhun3Xf37t1x5513xv3335/92Sc/+cm45JJLTpr75ptvxlVXXRX/+Z//edJ/k2N6enriZz/7\nWdx4443ZfsajRo2Kr33ta6c9Awy2ZEJjPY0BAAAAAACqSWIlrI2NjbF8+fK4/vrro7OzM15++eX4\nxCc+EXPnzo1x48bFrl27Yu3atZFOHw2Jxo0bl1f52x+33nprPP/887Fu3bro6OiIr33tazFz5syY\nOXNmdHR0xNq1a+PAgQPZ+UuXLs1ep30qbW1tsXz58li+fHlccMEFMX369Dj33HOjoaEh2tvbY+vW\nrbFly5bs3xIRcdlll8WyZctOu+aePXviX/7lX+K73/1uvPvd745p06bFmDFjora2Nt5666144YUX\n4uDBg9n5DQ0Ncd9998WECRP6+V8HkpMXGteVFxo3up4aAAAAAACgqiR67/GsWbPigQceiDvuuCN2\n794dPT098eSTT540b/r06XHvvfcmFog2NjbGD3/4w1i8eHH87ne/i4iITZs2xaZNm/LmjRgxIr71\nrW/Fddddd9q1amtro76+Po4cORIRRyuKd+/efdr59fX18eUvfzluu+22GDlyZMGzZjKZeP311+P1\n118/7ZwZM2bEd7/73Zg5c2bB9WAwpVK5lcblrZHf01ilMQAAAAAAQKUl3iz3Ax/4QPz617+OVatW\n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\nSuLRzHPPPRd33HFH7N69O+/ne/bsiT179sTTTz8dDz/8cNx7770xderUxPY9dOhQLF68OH7729/m\n/byrqyva2trilVdeiYceeijuvPPO+MIXvtDnWo8//njcdtttp/39gQMH4sCBA7Fhw4ZYuXJlXH31\n1bFs2bI455xzBvWcMBgGuqdxRERzTmjc05uOGFE3MBsBAAAAAABwkkRD440bN8bNN98cHR0dERHR\n0NAQc+fOjfPOOy927NgR69ati3Q6HZs3b44bb7wxfvGLX8T48eP7vW9PT08sXLgw1q1bl/3ZJZdc\nEjNnzoyOjo5Yu3ZttLW1RWdnZyxZsiRqamriuuuuK2rtxsbGmDZtWkyaNCnOPvvsSKfTsXfv3njx\nxRfjnXfeiYiINWvWRGtrazz66KNx1llnVeScMFAGuqdxxNFK42O6etN9zAQAAAAAACBpiYXGPT09\nsWjRomxgPGvWrPjRj36UFwq/9tprccstt8SOHTvirbfeittvvz0eeeSRfu+9YsWKbBA7YsSI+N73\nvhdXXXVV9vednZ1x9913x6pVqyIiYtmyZTFnzpyYMmXKKdcbN25cLFy4MObNmxezZs065VXaPT09\nsXLlyrjnnnsilUrFli1b4p577omlS5cO2jlhMORXGg9UaHx83R6hMQAAAAAAwKBK7LLZn//857Fr\n166IiBgzZkz8+Mc/PqmKeNq0aXH//fdnQ9h169bFk08+2a999+3bFytXrsw+33XXXXlBbMTRgPY7\n3/lOXH755RFxtGfxfffdd9o158yZE7fddlu8//3vP23v5cbGxvjKV74St956a/Znq1evju7u7kE7\nJwyGvNC4bmBC4+acSuPu3kwfMwEAAAAAAEhaYqHxo48+mh3fdNNN0dLScsp506ZNi2uvvTb7/NOf\n/rRf+65atSo6OzsjImLq1KmxYMGCU86rqamJ22+/Pfu8Zs2a2L9/f7/2joj4/Oc/nx13dHTE66+/\nXpXnhHKlB6GncWNeaKzSGAAAAAAAYDAlEgG1trbGtm3bss+5ofCp5P7+T3/6Uxw+fLjsvZ944ons\n+LOf/Wyfc2fPnh0XXXRRRESk0+m8d8t1zjnn5D2f7m+p9DmhXKnU8fFAXU/dlHM9tdAYAAAAAABg\ncCUSGq9duzY7njx5cowbN67P+e973/ti5MiRERHR3d0dL774Yln7dnV1xUsvvZR9/uAHP1jwnSuu\nuCI7fuaZZ8raN9fWrVvzni+44IKT5lTDOaFcg9HTuCmn0lhPYwAAAAAAgMGVSGicG5zOmjWr4Pz6\n+vqYPn36Kd8vRWtra6TTRwOmmpqamDlzZsF3Lr300uw4tzq6HL29vfGDH/wg+zx79uw4//zzq+6c\n0B+D0dO4SU9jAAAAAACAiqlPYpHt27dnxxMmTCjqnfHjx2fHra2tZe2b+15LS0s0NTUVfCf3fOXs\n29vbG/v27Yv169fHT37yk9i4cWNERIwcOTLuuuuuqjknJGUwKo31NAYAAAAAAKicRELjtra27Hjs\n2LFFvZN7hfXBgwf7vW9LS0tR7+Ser7OzM3p6eqKxsbHPd+bNmxd79+497e8nTZoUy5cvP20F8WCd\nEwZCKifDrUvkboKT6WkMAAAAAABQOYmExh0dHdlxMVW0J87Lfb/cfZubm4t658R5hw8fLjuMramp\niRtvvDG++c1v9rlGpc9ZSHt7e6xfv35A1qY6HPtHCG+8/nrJ7x5J1UbE0VB3184dUWqx8ajalni9\ndn/s27fvtHMO7K+NY7flb9u+I9Y3v1HyOYEzi/9fAoYS3yz+P3v3GuNnWeeP/zPnmc5AK+3ws4AL\nPYRSagMNhVqNwAqCsMpaLJqFDWQ1xQZsYV3IikUIGEmUBAytigFcYD3EoKVKDCDgH1AMpRxLoBQp\nhbK0FmiZ1umcv/P9Pyjcc387M53T9zTwej267s513dfVeXD3wbuf6wPjhe8VMJ74ZgHjhe8VHxR5\nCY07OzuTcU1NzbDWpAPQjo6Okuy77zsGc/bZZ8fu3bsjYm/V79atW+O5556L9vb2uP322+Ohhx6K\nq6++Oj796U+X9JyQb3tvpn4/Jc5GYS6njqip6ht3ZyoiQl9jAAAAAACAYslLaJyuGu7u7h7Wmq6u\nrmQ83OrbfO+77zsGc+mll/b7s9bW1rj11lvjpz/9abzxxhtx4YUXxg033BBnnHFGyc45Wk1NTTFr\n1qyCvZ/Se/29CuN/OvzwEa3r7umNeGZrROztZ3z4ESNbHxFx0OS6OPzwpjh8P3tvan0rYsO2iIiY\nPOX/xXHHHTLifYAPhvf/Z+Zxxx1X4pMADM03CxgvfK+A8cQ3CxgvfK8opY0bN0Zra2te35mXDqUT\nJkxIxsOtiE3PS68f7b7DrVbed15jY+Oo9m5qaopLL700VqxYERERvb298Z3vfCd27txZVueEscjp\nZ1xVqDpjPY0BAAAAAABKKS+h8cSJE5Px/vqWpqXnpdePxKRJk5Lxjh07RrxvQ0PDmPsEn3feeXHE\nEUdERMQ//vGP+P3vf1+W54TRyPT2XRNdNdJmxiNQV9P3KRIaAwAAAAAAFFdeQuNp06Yl423btg1r\nTXpeev1o992xY0e/K50LtW9aRUVFLFy4MHl+9tln+80ph3PCaGQypQiN9TMGAAAAAAAopryExjNm\nzEjGL7744pDze3p64uWXXx5w/UhMmzYtKiv3/hWy2Wxs2LBhyDXp802fPn1U++7rwAMPTMa7d+/u\n9/NyOSeMVLEqjWtToXGXSmMAAAAAAICiyktovGDBgmS8efPmIa+ofuGFF6KtrS0iIurq6uLYY48d\n1b719fVxzDHHJM9PPPHEkGvWrVuXjD/xiU+Mat99vf3228l4oKu2y+WcMFK5oXHh9qnX0xgAAAAA\nAKBk8nY99fvVsNlsNtasWbPf+XfffXcyXrhwYTQ2No5678985jPJ+He/+91+565fvz5effXViIio\nrKzMWTta3d3d8dhjjyXPg1VNl/qcMBqZVH5bVVWcSmOhMQAAAAAAQHHlrXbw3HPPTca33XZb7Ny5\nc8B5mzZtitWrVw+4bjQWLVoUDQ0NERHxt7/9LSeQTstms3H99dcnz6effnpMnjy537yenp5obW0d\n9v6rVq2K7du3J8+nnnpqUc4JxVCKnsZdehoDAAAAAAAUVd5C46985Stx6KGHRkTEzp0748ILL8wJ\nUyP2BsZLly6Nzs7OiIg4/vjj46STThrwfStXroxZs2bFrFmz9ltp29zcHOeff37yfO2118aDDz6Y\nM6ejoyNWrFiRXAtdU1MTy5cvH/B9bW1tccopp8SqVatiy5Ytg+67devW+Pa3vx0333xz8mef//zn\n46ijjirKOaEYitXTuE6lMQAAAAAAQMlU5+tFtbW1sXLlyjjvvPOivb09nn/++Tj11FNj4cKF0dzc\nHG+++WasXbs2env3BkLNzc05FbVj8Y1vfCOefvrpWLduXbS1tcXFF18cs2fPjtmzZ0dbW1usXbs2\n3n333WT+1VdfnVynPZCWlpZYuXJlrFy5Mg455JA48sgj46CDDoqamppobW2NTZs2xcsvv5z8XSIi\njjnmmLjmmmuKek4otGL1NK7T0xgAAAAAAKBk8hYaR0TMmTMnbr311rj88stj69at0dXVFY888ki/\n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\n+edj+/btUV9fH4ccckicdNJJsXjx4jjssMOG9Z5du3bFY489Fo8//ni89NJLsWXLlmhtbY26urqY\nMmVKzJ07N0477bQ45ZRTomoYjV/Xrl0b559//oj+LpdccklcdNFFI1oDY5UbGpfmDNVVFVFZGdHb\nG9GbjejJZKOmujQBNgAAAAAAwAdd3kPjJ598Mi6//PLYunVrzp9v27Yttm3bFn/5y1/ijjvuiBtv\nvDFmzJiRt313794dK1asiD/+8Y85f97R0REtLS3x4osvxu233x7f/va348tf/vKg79mzZ09885vf\njMceeyy6u7v7/by7uztaW1vjtddei3vuuSdmzpwZ119/fRx99NF5+7tAKeX0NK4qXVBbV1MZ7Z17\nD9PZnY2agvwXFwAAAAAAAPIaw7zwwguxZMmSaGtri4iImpqaWLhwYRx88MHxxhtvxLp166K3tzc2\nbtwYF1xwQfzmN7+Jj370o2Pet6urKy666KJYt25d8mdHHXVUzJ49O9ra2mLt2rXR0tIS7e3t8Z3v\nfCcqKirinHPOGfBdbW1t8fDDD+f82cEHHxxz5syJKVOmRGdnZzz//POxefPmiIh45ZVX4rzzzov/\n+Z//iWOPPXZY5z344IPjs5/97JDz5s6dO6z3QT6Vw/XUEbmhcVd3b0TD0BX9AAAAAAAAjFzeQuOu\nrq5YtmxZEhjPmTMnfvzjH+eEwq+88kosXbo03njjjXj77bfjsssui5///Odj3nvVqlVJYNzQ0BA/\n+MEP4rTTTkt+3t7eHtdee22sXr06IiKuueaaOO6442L69OmDvnPSpEmxaNGiOPvss+PII4/s9/OH\nH344rrjiiti5c2e0tbXFpZdeGvfee280NDQMed4jjjgirrrqqpH+NaEoyik0fl9Hd+9+ZgIAAAAA\nADAWeetY+utf/zrefPPNiNgbuN5yyy39qohnzpwZN998c9LPeN26dfHII4+Mad933nkn7rzzzuT5\nyiuvzAmMI/YGydddd10cf/zxEbH3iumbbrppwPfV1NTExRdfHA899FB861vfGjAwjog4+eST45Zb\nbonq6r25+7Zt2+Luu+8e098FykEmUx6hcW1N395dQmMAAAAAAICCyVto/Mtf/jIZf+1rX4vJkycP\nOG/mzJmxaNGi5PlXv/rVmPZdvXp1tLe3R0TEjBkzYvHixQPOq6ioiMsuuyx5vv/++2PHjh395k2a\n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\nGNfU1MSJJ54YixcvjgULFkRl5d7tNm7cGBdccEH8/e9/z8u+XV1dcdFFF+UExkcddVQsWrQoTj/9\n9Jg0aVJERLS3t8d3vvOduOuuuwZ9V1tbWzz88MM5gfHBBx8c//zP/xznnHNOnHXWWTFt2rTkZ6+8\n8kqcd9558eyzzw55zt27d8d//Md/5ATG8+bNiy996UtxyimnxIQJEyIioqWlJZYvXx5/+ctfhv9L\ngFHKpK6mrirzq6nf15jqa9yqrzEAAAAAAMCY5K3SuKurK5YtWxZtbW0RETFnzpz48Y9/HB/96EeT\nOa+88kosXbo03njjjXj77bfjsssui5///Odj3nvVqlVJENvQ0BA/+MEP4rTTTkt+3t7eHtdee22s\nXr06IiKuueaaOO6442L69OmDvnPSpEmxaNGiOPvss+PII4/s9/OHH344rrjiiti5c2e0tbXFpZde\nGvfee280NDQM+s5rrrkmXn311YiI+MhHPhKrVq2K+fPnJz/ftWtX/Nd//Vf8+c9/jkwmE//5n/8Z\nDzzwQBJ6QyGkK42rxkGlcUREUyo03tMuNAYAAAAAABiLvFUa//rXv44333wzIvYGrrfccktOYBwR\nMXPmzLj55puTfsbr1q2LRx55ZEz7vvPOO3HnnXcmz1deeWVOYByxN0i+7rrr4vjjj4+IvVdM33TT\nTQO+r6amJi6++OJ46KGH4lvf+taAgXFExMknnxy33HJLVFfvzd23bdsWd99996DnfOmll+IPf/hD\n8nzjjTfmBMYRERMnToxVq1bFEUccERF7K5NvueWWQd8J+ZCuNK4eWXvukmls6Pt0qTQGAAAAAAAY\nm7yFxr/85S+T8de+9rWYPHnygPNmzpwZixYtSp5/9atfjWnf1atXR3t7e0REzJgxIxYvXjzgvIqK\nirjsssuS5/vvvz927NjRb96kSZNi+fLl0dTUNOTeH//4x3MC6kcffXTQub/61a8im90bzn3605+O\nhQsXDjivvr4+li9fnjzfdddd0dPTM+RZYLR6UpmrSmMAAAAAAIAPn7yExps3b06uXY6InFB4IOmf\n//Wvf409e/aMeu8//elPyfiLX/zifucee+yxSRVvb29vztrRmjdvXjJ+v9J6X9lsNmevs88+e7/v\n/OxnPxuNjY0RsffK6ieeeGLM54TB5FYaj4/QuLFBT2MAAAAAAIB8yUtovHbt2mQ8bdq0aG5u3u/8\nuXPnxoQJEyIiorOzM5599tlR7dvR0RHPPfdc8nzCCScMuWbBggXJ+PHHHx/VvmkVFX0hW29v74Bz\nNm/eHG+99Vby/P412YOpra3NCaPTv1/It/HY07gxXWksNAYAAAAAABiTvITGmzZtSsZz5swZcn51\ndXVOr+D0+pHYln+v6gAAIABJREFUvHlzEtRWVFTE7Nmzh1xz9NFHJ+N0dfRovfzyy8l43x7OA+3T\n3Nw8ZKgekXvO0f5+YDjGY6VxU7rS2PXUAAAAAAAAY5KX0Pi1115LxlOnTh3WmnTAunnz5lHtm143\nefLkqKurG3JN+nyj3fd9bW1tcf/99yfPn/zkJwecl97nkEMOGda78/H7geHIpCuNx0lorNIYAAAA\nAAAgf/ISGre0tCTjKVOmDGtNutp2165dY9538uTJw1qTPl97e3t0dXWNau+IiFWrViVnnzBhwqA9\nlUdzznz8fmA40tdTV4+T66mb0qGxSmMAAAAAAIAxqc7HS9ra2pLxcKp9952XXj/afevr64e1Zt95\ne/bsidra2hHvvW7durjjjjuS5yVLlgwaCI/mnOnfz549e0Z8vpFobW2Np556qqB7UFrv/2eJLa+/\n3u9n23dUxPv/f6SjY09seb01r3s3Vk6O1yt3xDvvvJO3d27bVhERe4PjrW+9G089tSNv7wbKg3+X\ngPHENwsYL3yvgPHENwsYL3yv+KDIS6VxZ2dnMq6pqRnWmnRQ29HRUZJ9933HcG3fvj0uvfTS6Onp\niYiIefPmxde//vWCnXM0Z4ThSrU0jnFyO3XU1/YduqNrnBwaAAAAAACgTOWl0jhdFdvd3T2sNelr\noYdbfZvvffd9x3D84x//iCVLliRVk83NzXHDDTdEVVXVoGvGes6RnnGkmpqaYtasWQXdg9J6/b0K\n4386/PB+P3u35x8RW/ZegT5x4gHxT4d/JK97zziiMQ6bUh+HD7D3aDW/1RHx/22MiIhsVX0cd9xR\neXs3UFrv/8/M4447rsQnARiabxYwXvheAeOJbxYwXvheUUobN26M1tb83hybl9B4woQJyXi4VbHp\neen1o913uNXK+85rbGwc9n4dHR2xdOnS2Lhxb1h1wAEHxK233hqHHHJI3s+Z/v2M5IwwUj2plsBV\nBepp/Pzm/H64drf1JONde3r2+/6505ryujcAAAAAAMAHTV5C44kTJybj4fYtTc9Lrx+JSZMmJeMd\nO4bX0zS9b0NDw7D7GXd3d8cll1wSTz75ZETsrY6++eab46ijhq5wTP/9RnPO0f5+YDgyqfupqwt4\nP/Ubb+fvmvWeTN+Z2zozseWtjqio6H/2jzUXtkofAAAAAADggyAvPY2nTZuWjLdt2zasNel56fWj\n3XfHjh39rp7O1769vb1x+eWXx8MPPxwRe/sS33TTTTF//vxhrZ8+fXoy3rp167DW5OP3A8ORDmCr\nxklT46rKiMr3vl69vRGZ3tKeBwAAAAAAYDzLS2g8Y8aMZPziiy8OOb+npydefvnlAdePxLRp06Ly\nveQom83Ghg0bhlyTPl86zB1MNpuNK6+8Mu69996IiKisrIzrr78+TjrppGGfM73P22+/Paxq7PQ5\nR/v7geHIpELj6gJdT51vFRUVUVfT9/nq7JYaAwAAAAAAjFZeQuMFCxYk482bNw8Zir7wwgvR1tYW\nERF1dXVx7LHHjmrf+vr6OOaYY5LnJ554Ysg169atS8af+MQnhpx/3XXXxW9/+9uI2BtUffe7340z\nzjhjROecNm1aHHzwwcM+Z1dXVzz77LPJc/r3C/mWvp56vFQaR0RuaNwlNAYAAAAAABitvF1P/X41\nbTabjTVr1ux3/t13352MFy5cGI2NjaPe+zOf+Uwy/t3vfrffuevXr49XX301IvZWDKfXDuSHP/xh\n3HnnncnzFVdcEYsXLx7xGSsqKnL2Gur38+CDD0Zra2tERBx44IFxwgknjHhPGK6ecVhpHBFRV9N3\nVpXGAAAAAAAAo5eX0Dgi4txzz03Gt912W+zcuXPAeZs2bYrVq1cPuG40Fi1aFA0NDRER8be//S0n\nkE7LZrNx/fXXJ8+nn356TJ48edD3/uxnP4uf/OQnyfPy5cvjggsuGPU5/+3f/i0qKvaGXI8++mis\nXbt2wHmdnZ1x0003Jc9f/vKXo7q6etT7wlB6PgiVxkJjAAAAAACAUctbaPyVr3wlDj300IiI2Llz\nZ1x44YWxffv2nDmbNm2KpUuXRmdnZ0REHH/88YP2Bl65cmXMmjUrZs2atd+K4Obm5jj//POT52uv\nvTYefPDBnDkdHR2xYsWK5FrompqaWL58+aDvvOuuu+L73/9+8vzVr341Lr744kHnD8dRRx0V//Iv\n/xIRewPsSy+9NJ566qmcObt3745ly5bF5s2bI2JvlfGSJUvGtC8MJd3TuGocVRrXpkLjru7sfmYC\nAAAAAACwP3krYa2trY2VK1fGeeedF+3t7fH888/HqaeeGgsXLozm5uZ48803Y+3atdHbu7cisLm5\nOafydyy+8Y1vxNNPPx3r1q2Ltra2uPjii2P27Nkxe/bsaGtri7Vr18a7776bzL/66quT67T3tXHj\nxrjqqquS56ampujs7Ixrr712WGdJr93X1VdfHS+++GK8+uqrsXPnzjj33HNj3rx5MX369Ni1a1f8\n9a9/TXo9V1VVxQ033BCTJk0a1r4wWulK4+qqEh5khFQaAwAAAAAA5Ede7z2eM2dO3HrrrXH55ZfH\n1q1bo6urKx555JF+84488si48cYbY+rUqXnZt7a2Nn70ox/FihUr4oEHHoiIiA0bNsSGDRty5jU0\nNMQVV1wR55xzzqDvamlpSYLtiIjW1tb4xS9+Meyz7C80PvDAA+NnP/tZXHbZZfHkk09GRMQzzzwT\nzzzzTM68SZMmxfe+97349Kc/Pex9YbQymb7x+LqeWk9jAAAAAACAfMh7s9z58+fHPffcE6tXr477\n7rsvtmzZEi0tLXHQQQfFzJkz48wzz4yzzjoramtr87rvxIkTY9WqVfHoo4/GmjVrYv369fHWW29F\nfX19TJ06NU4++eRYvHhxfOxjH8vrviM1derU+N///d+477774p577omNGzfG22+/HU1NTXHooYfG\nZz/72fjSl74UU6ZMKek5+fBIX09dPY6up1ZpDAAAAAAAkB95D40j9l7pfP755+f0Gh6pZcuWxbJl\ny0a87sQTT4wTTzxx1PsuWLAgNm7cOOr1w1FZWRlnnnlmnHnmmQXdB4YjfT31+Ko0TofGehoDAAAA\nAACMVuXQU4APMpXGAAAAAAAAH25CY/iQy4zTSuPaVE/jLqExAAAAAADAqAmN4UOuJ11pPI5CY5XG\nAAAAAAAA+SE0hg+5nJ7G4/Z6aj2NAQAAAAAARktoDB9ymfFaaVyr0hgAAAAA+P/Zu/MYu+t6f/yv\nM2dmOlvpSDuFspW2fCmlVOCySfwJxosYuVcURc3VBHNjMAQF7wK5UVwCUUM0XqKg0Sg3btEYTUGJ\nibiQi3qNpSJQpAWlTFlLV2bKbD1zlt8ftWc+p7bTWc7MWT6Px1/v034+5/Oeo3P449nn+wVANQiN\nIcVKpVIUEnlrtoG+EQ49nrpU0jYGAAAAAACYiQaKiIBqSwbGLS0RmUzjNI2zLQf2HBFRLFb+LAAA\nAAAAAEyd0BhSrOJo6gaaZxxxIOA+tG0MAAAAAADA9AmNIcXyxYnQONtA84wPqgiNc0JjAAAAAACA\nmRAaQ4o1ctM4ImJB28SeNY0BAAAAAABmRmgMKdZUTWOhMQAAAAAAwIwIjSHFKprGDRgatydC49x4\naZIrAQAAAAAAOBKhMaRYPhEaZxvyeGpNYwAAAAAAgNkSGkOKFYrJpnENNzJDZhoDAAAAAADMntAY\nUqzRm8btFU1jx1MDAAAAAADMhNAYUqyQKOdmG3Cm8YKKmcaaxgAAAAAAADMhNIYUKySaxq0N2DQ2\n0xgAAAAAAGD2hMaQYvnETOPGbBqbaQwAAAAAADBbQmNIseZqGptpDAAAAAAAMBNCY0ixZNO4tSGb\nxo6nBgAAAAAAmC2hMaRYsmnciMdTtydC45zQGAAAAAAAYEaExpBi+WRo3JDHU5tpDAAAAAAAMFtC\nY0ixQsXx1DXcyAy1ZjNxMOsuFCtDcAAAAAAAAKZGaAwpli9MrBuxaZzJZMw1BgAAAAAAmCWhMaRY\nZdO48ULjiBAaAwAAAAAAzJLQGFKs0WcaR0S0t0/sOyc0BgAAAAAAmDahMaRYsmmcbYqmsZnGAAAA\nAAAA0yU0hhQrJJrGrQ3aNHY8NQAAAAAAwOwIjSHF8mYaAwAAAAAApJ7QGFIs2TRu3OOpJ/a9Pyc0\nBgAAAAAAmC6hMaRYPhkaN+jx1O1mGgMAAAAAAMyK0BhSrFBxPHUNNzILyeOpc46nBgAAAAAAmDah\nMaRYvjCxbtSmsZnGAAAAAAAAsyM0hhSrbBo3amicmGksNAYAAAAAAJg2oTGkWMVM44YNjc00BgAA\nAAAAmA2hMaRYRdPY8dQAAAAAAACpJDSGFCs0QdO4PREa54TGAAAAAAAA0yY0hpQqFktxsGiciYgG\nLRqbaQwAAAAAADBLQmNIqeTR1NlsJjKZxkyNW7OZcuBdKFbOaQYAAAAAAODohMaQUslwtVHnGUdE\nZDIZc40BAAAAAABmQWgMKVXZNK7hRqpAaAwAAAAAADBzQmNIqXxhYp3NNm7TOCKivX1i/zmhMQAA\nAAAAwLQIjSGlkk3jRj6eOuLQprGZxgAAAAAAANMhNIaUSs40bvSmseOpAQAAAAAAZk5oDClVKDRr\n01hoDAAAAAAAMB1CY0ipfLGZmsYT+9+fExoDAAAAAABMh9AYUqqZmsbtZhoDAAAAAADMmNAYUqrQ\nVE3jia+ynOOpAQAAAAAApkVoDCmVTzaNmyg0NtMYAAAAAABgeoTGkFLJ0Djb4N8EFTONhcYAAAAA\nAADT0uBRETBThUS22kzHU5tpDAAAAAAAMD1CY0ipQvJ46pZmCo01jQEAAAAAAKZDaAwplS8mjqdu\n8KZxeyI0zgmNAQAAAAAApkVoDCnVXE1jM40BAAAAAABmSmgMKdVMTePWbCYO5t6FYkS+YK4xAAAA\nAADAVAmNIaUqmsYNHhpnMhlzjQEAAAAAAGZIaAwpVUg2jRv8eOqIEBoDAAAAAADMkNAYUirfRE3j\niIj29omfISc0BgAAAAAAmDKhMaRUMjTONsE3QWXT2ExjAAAAAACAqWqCqAiYiUKijJttgqax46kB\nAAAAAABmRmgMKVVIHk9tpjEAAAAAAEBqCY0hpfLFxPHUTdE0nvgZ9ueExgAAAAAAAFMlNIaUaram\ncbuZxgAAAAAAADMiNIaUar6m8cTXWc7x1AAAAAAAAFMmNIaUqmgaN1lobKYxAAAAAADA1AmNIaUK\nyaZxExxPXTHTWGgMAAAAAAAwZUJjSKl8UzeNzTQGAAAAAACYKqExpFQyNM42wTeB46kBAAAAAABm\npgmiImC6SqVSFBK5arYJmsbtidA4JzQGAAAAAACYMqExpFAxkam2ZCJaMo0fGptpDAAAAAAAMDNC\nY0ihfDFxNHUTtIwjDsxlbvnbj1IoVh6/DQAAAAAAwJEJjSGFColAtbWlOULjTCZjrjEAAAAAAMAM\nCI0hhZqxaRwRQmMAAAAAAIAZEBpDClU0jZsoNG5vn/hZckJjAAAAAACAKREaQwpVNI2b5HjqiEOb\nxmYaAwAAAAAATIXQGFKosmlcw41UmeOpAQAAAAAApk9oDCmUL6ShaSw0BgAAAAAAmAqhMaRQIZGn\nNtNM4wVtEz/L/pzQGAAAAAAAYCqExpBCzdo0bjfTGAAAAAAAYNqExpBChWIiNG6qpvHEV1rO8dQA\nAAAAAABTIjSGFCokmsatTdQ0NtMYAAAAAABg+oTGkEL5pm0aJ2YaC40BAAAAAACmRGgMKVTRNG6q\n0NhMYwAAAAAAgOkSGkMK5ROhcdbx1AAAAAAAAKkmNIYUSh5P3Zqt4UaqrD0RGueExgAAAAAAAFMi\nNIYUKjRt09hMYwAAAAAAgOkSGkMKFRJ5ajPNNG7NZuJgBl4oRoznBccAAAAAAABHIzSGFKqYadxE\noXEmk6mYazyWExoDAAAAAAAcjdAYUih5PHVrEx1PHREVofGo0BgAAAAAAOCohMaQQvliczaNIyLa\n2yd+nmY6ehsAAAAAAGCutNZ6A8D8SzaNs83cNN5fjMf7h2qyj3UremryXAAAAAAAgOkSGkMKFRJN\n42Zr4yZD45H9hYiIeH7X/nndw8l9C+b1eQAAAAAAALPheGpIoXwhLaGxmcYAAAAAAABHIzSGFKqY\nadxk3wIL2iZC8NGxQg13AgAAAAAA0BiaLC4CpqKQyFKzTdY0btc0BgAAAAAAmBahMaRQIXk8dUtz\nhcaHm2kMAAAAAADAkQmNIYUqjqdusqZxMjQeHtM0BgAAAAAAOBqhMaRQMzeNF3Zmy+unnhuJfOJn\nBQAAAAAA4O8JjSGFmrlpfPzi9nJwPDRWiD9vG67xjgAAAAAAAOqb0BhSqJmbxi2ZTJx5anf59UNP\n7qvhbgAAAAAAAOqf0BhSplgqRaJoHC1N+C2w5pSuOBiFP/3iaAwO52u6HwAAAAAAgHrWhHERMJmK\nlnE2E5lMczWNIyIWdrXGKcd1lF9vdkQ1AAAAAADAEQmNIWXyidA428TfAGsTR1RveW44isl6NQAA\nAAAAAGVNHBkBh1MoTqxbs83XMj7o1OM74piubEREDI8VY9uOsRrvCAAAAAAAoD4JjSFlChVN4+YN\njbMtmXj9WYvKr59wRDUAAAAAAMBhCY0hZfKJY5qzTdw0joj4/xKh8bMvj8XQaL6GuwEAAAAAAKhP\nQmNImWTTuLWJm8YREUtf0x6rTuiIiIhSRGx5dqS2GwIAAAAAAKhDQmNImTQ1jSMiLjzjmPJ687PD\nUSqVJrkaAAAAAAAgfVrn4k2Hhobinnvuifvvvz+2bdsWg4ODsXjx4li1alVcccUV8ba3vS3a29vn\n4tHx29/+Nu699954/PHHY8eOHdHR0REnnHBCXHrppXH11VfHSSedNOX3euGFF2LTpk2xadOmeOyx\nx2Lz5s0xNjYWEREnnnhiPPDAA1N+rw0bNsQ111wzrZ/lox/9aFx//fXTugeOJk1N44iIs07tjo62\nlhgbL8a+kUI8v3N/nHJcR623BQAAAAAAUDeqHhr/8Y9/jJtvvjleeumlij/fvn17bN++PX73u9/F\nt7/97bjjjjti1apVVXvuvn374pZbbolf/OIXFX8+NjYWAwMDsXnz5vjWt74VH//4x+M973nPpO81\nPDwcl112Wezdu7dq+4N6kbamcVtrS6w+pSse2zoUERFPPDssNAYAAAAAAEioamj8xBNPxLXXXhsj\nIwfmhra1tcXFF18cS5cujeeffz42btwYxWIxnnrqqfjABz4QP/7xj+P444+f9XNzuVxcf/31sXHj\nxvKfnXHGGbFmzZoYGRmJDRs2xMDAQIyOjsYnP/nJyGQy8e53v/uI71coFOY0MF66dGm8+c1vPup1\n69atm7M9kF4VTeMUhMYREWtP7S6Hxs+8NBqj+wvRuSBb410BAAAAAADUh6qFxrlcLm644YZyYLx2\n7dr46le/WhEKP/3003HdddfF888/H7t27Yqbbropvve978362XfddVc5MO7s7IzPf/7zcfnll5f/\nfnR0NG677bZYv359RETceuutcd5558XKlSsnfd+urq4466yz4rWvfW2cffbZsW3btvjiF7846/2e\neuqp8alPfWrW7wMzUShOrLMpmWq++Ji2OP7Y9nh5by6KpYgtz43EP/y/hbXeFgAAAAAAQF2oWmT0\nwx/+MF588cWIiOjt7Y1vfOMbf9ciPu200+JrX/taeZ7xxo0b48EHH5zVc3fv3h3f+c53yq8/8YlP\nVATGEQeC5M997nNxwQUXRETE+Ph4fPnLXz7ie3Z1dcVPf/rTePjhh+O73/1u3HzzzXH55ZfHkiVL\nZrVXqAf5FDaNIyLWLu8ur5/YNhylUmmSqwEAAAAAANKjaqHx97///fL6gx/8YCxevPiw15122mlx\n1VVXlV//4Ac/mNVz169fH6OjoxERsWrVqrj66qsPe10mk4mbbrqp/Pr++++PPXv2HPba1tbWWL16\ndbS0pKSGSaokQ+NsS3pC4/93Ume0tR74eQeG8vHSnlyNdwQAAAAAAFAfqpKK9vf3xzPPPFN+nQyF\nDyf597///e9jeHh4xs9+4IEHyut3vOMdk157zjnnxKmnnhoREcViseJeSItCMREap6hp3NbaEqtP\n6iq/fmLbzL93AAAAAAAAmklVQuMNGzaU1ytWrIi+vr5Jr1+3bl10dR0Ib/bv3x+PPvrojJ47NjYW\njz32WPn1hRdeeNR7LrroovL6D3/4w4yeC42skDyeOkVN44iIM0+dOKL66RdHYixXnORqAAAAAACA\ndGitxpts3bq1vF67du3RH9raGqeffno5LN66dWu8/vWvn/Zz+/v7o1g8EPpkMplYs2bNUe8588wz\n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\nTZti06ZN8dhjj8XmzZtjbGwsIiJOPPHEeOCBB2a0x2KxGPfff3/cd9998eSTT8auXbti4cKFcdJJ\nJ8Vll10W73znO2PJkiUzem84VC6vaVwrydB496CmMQAAAAAAUJ+qHhr/8Y9/jJtvvjleeumlij/f\nvn17bN++PX73u9/Ft7/97bjjjjti1apVVXvuvn374pZbbolf/OIXFX8+NjYWAwMDsXnz5vjWt74V\nH//4x+M973nPpO81PDwcl112Wezdu7dq+zvo5Zdfjptuuik2btxY8ed79uyJPXv2xGOPPRZ33313\nfPazn43LLrus6s8nfZJN46ym8bxKHk+9a1DTGAAAAAAAqE9VPZ76iSeeiGuvvbYcGLe1tcUll1wS\nV199dVx00UXR0nLgcU899VR84AMfiJdffrkqz83lcnH99ddXBMZnnHFGXHXVVfGWt7wlent7IyJi\ndHQ0PvnJT8aPfvSjSd+vUCjMSWC8b9+++Nd//deKwPjcc8+Nd73rXfGP//iP0dXVFRERAwMDceON\nN8bvfve7qu+B9BlPNI1bszXcSAr19U40jXc6nhoAAAAAAKhTVWsa53K5uOGGG2JkZCQiItauXRtf\n/epX4/jjjy9f8/TTT8d1110Xzz//fOzatStuuumm+N73vjfrZ991113lILazszM+//nPx+WXX17+\n+9HR0bjtttti/fr1ERFx6623xnnnnRcrV66c9H27urrirLPOite+9rVx9tlnx7Zt2+KLX/zijPd5\n6623xjPPPBMREa95zWvirrvuivPPP7/894ODg/Gf//mf8dvf/jYKhUL8+7//e/zyl78sh94wE7lx\nTeNa6Vs00TR2PDUAAAAAAFCvqtY0/uEPfxgvvvhiRET09vbGN77xjYrAOCLitNNOi6997WvlecYb\nN26MBx98cFbP3b17d3znO98pv/7EJz5RERhHHAiSP/e5z8UFF1wQERHj4+Px5S9/+Yjv2dXVFT/9\n6U/j4Ycfju9+97tx8803x+WXXz6rOcNPPvlk/OxnPyu/vuOOOyoC44iIRYsWxV133RWnnnpqRBxo\nJn/jG9+Y8TMhonKmcauZxvMqOdN4l6YxAAAAAABQp6oWGn//+98vrz/4wQ/G4sWLD3vdaaedFldd\ndVX59Q9+8INZPXf9+vUxOjoaERGrVq2Kq6+++rDXZTKZuOmmm8qv77///tizZ89hr21tbY3Vq1eX\n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\nAIAoRtAYAAAAAAAAAAAAAKIYQWMAAAAAAAAAAAAAiGIEjQEAAAAAAAAAAAAgihE0BgAAAAAAAAAA\nAIAoRtAYAAAAAAAAAAAAAKIYQWMAAAAAAAAAAAAAiGIEjQEAAAAAAAAAAAAgihE0BgAAAAAAAAAA\nAIAoRtAYAAAAAAAAAAAAAKIYQWMAAAAAAAAAAAAAiGLWgW4AAAAAAADDwerVq/XEE0/0qey3vvUt\nrVixIswtAgAAAAAgNMw0BgAAAAAAAAAAAIAoxkxjAAAAAAAi4IILLgg5b15eXgRbAgAAAADA6RE0\nBgAAAAAgAtasWTPQTQAAAAAAICQsTw0AAAAAAAAAAAAAUYygMQAAAAAAAAAAAABEMZanBgAAAABg\nkDp27Jg++OADffLJJyoqKlJ5ebmam5tls9mUnJysgoICnXfeebr22muVmJjYY3179+7V4sWLjeOP\nPvpIKSkpqqmp0V//+le9/fbbOnTokKqqquR2u/U///M/WrRoUdC6mpub9b//+796//33tWfPHtXU\n1Mjr9SolJUUTJ07Ul770JV1zzTWy2+1h+zwAAAAAAJFB0BgAAAAAgEHoRz/6kV5//XX5/f4ur7nd\nbrW0tKiiokLvvPOOVq9erRUrVuirX/1qr8/zzjvv6O6771ZtbW3IZdauXatVq1apurq6y2sVFRWq\nqKjQxo0b9dvf/lYrV67U/Pnze90uAAAAAED/IWgMAAAAAMAgtGfPHiNgbDKZNGbMGKWlpSkuLk6t\nra0qLS1VfX29JKmpqUl33323mpub9c1vfjPkc2zevFl33HGHvF6vJCknJ0fp6elqampSSUlJl/x+\nv18PPPCAnnvuuU7Pjx49WllZWbJarSorK9PRo0clBQLIt9xyix599NFuZywDAAAAAAYeQWMAAAAA\nAAahmJgYXX311brssst03nnnyeFwdHrd7/dr27ZtevTRR7Vjxw5J0kMPPaQFCxYoLy8vpHOsWLFC\nXq9XV155pf7jP/5D2dnZxmtNTU1yOp2d8j/zzDOdAsZf+cpX9IMf/EATJkzolG/Hjh26//77VVhY\nKLfbrbvvvlsTJ05UTk5Obz4CAAAAAEA/MQ90AwAAAAAAQFcvvPCCHn74YV1yySVdAsZSYPbxnDlz\n9Nxzz2nevHmSAstW//73vw/5HM3Nzbrpppv0y1/+slPAWJIcDodGjRplHBcXF2vVqlXG8R133KHH\n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\n",
            "text/plain": [
              "<Figure size 1152x720 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "image/png": {
              "width": 966,
              "height": 608
            }
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5Z-2vb0uCYMZ",
        "colab_type": "text"
      },
      "source": [
        "# Preprocessing\n",
        "\n",
        "## Missing data"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "RxbOfWRABASj",
        "colab_type": "code",
        "outputId": "b0c7f801-5625-4ff1-f09e-275440c1e34b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 85
        }
      },
      "source": [
        "missing = df.isnull().sum()\n",
        "missing[missing > 0].sort_values(ascending=False)"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Cabin       687\n",
              "Age         177\n",
              "Embarked      2\n",
              "dtype: int64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 9
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bnFZ76nvBfHP",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "df = df.drop(['Cabin', 'Name', 'Ticket', 'PassengerId'], axis=1)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "39bHqKRbCoL4",
        "colab_type": "code",
        "outputId": "0a134bd8-a84b-4a0c-babe-3ba0349ee152",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "df.shape"
      ],
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(891, 8)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 11
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "u5oZdltxGyRP",
        "colab_type": "text"
      },
      "source": [
        "### Imputation"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "O-nD800TCau2",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "df['Age'] = df['Age'].fillna(df['Age'].mean())"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jlqTsCJdHj5p",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "df['Embarked'] = df['Embarked'].fillna(df['Embarked'].mode()[0])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "FMlJzdf9INqV",
        "colab_type": "text"
      },
      "source": [
        "## Categorical features"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Fiz0gDs8IWS5",
        "colab_type": "code",
        "outputId": "46f6dcda-b93f-4e7b-866b-38f6758a3b1e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 68
        }
      },
      "source": [
        "df.columns"
      ],
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Index(['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare',\n",
              "       'Embarked'],\n",
              "      dtype='object')"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 14
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9IhzdAwaH9I8",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "df = pd.get_dummies(df, columns=['Sex', 'Embarked', 'Pclass'])"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "OG36y13gIx5m",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X = df.drop('Survived', axis=1)\n",
        "y = df.Survived"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "BQr0RT4jJHLC",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=RANDOM_SEED)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-68OhxIrMOKG",
        "colab_type": "text"
      },
      "source": [
        "# Hyperparameter tuning"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "DlblLP-0TBQF",
        "colab_type": "text"
      },
      "source": [
        "## Optimizer"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YbKf0WvfJO_G",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def tune_optimizer_model(hp):\n",
        "    model = keras.Sequential()\n",
        "    model.add(keras.layers.Dense(units=18, activation=\"relu\", input_shape=[X_train.shape[1]]))\n",
        "\n",
        "    model.add(keras.layers.Dense(1, activation='sigmoid'))\n",
        "\n",
        "    optimizer = hp.Choice('optimizer', ['adam', 'sgd', 'rmsprop'])\n",
        "\n",
        "    model.compile(\n",
        "        optimizer=optimizer,\n",
        "        loss = 'binary_crossentropy', \n",
        "        metrics = ['accuracy'])\n",
        "    return model"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9Cup93cYONBY",
        "colab_type": "code",
        "outputId": "878d7e83-45e2-4896-df3a-df0b82212439",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 193
        }
      },
      "source": [
        "MAX_TRIALS = 20\n",
        "EXECUTIONS_PER_TRIAL = 5\n",
        "\n",
        "tuner = RandomSearch(\n",
        "    tune_optimizer_model,\n",
        "    objective='val_accuracy',\n",
        "    max_trials=MAX_TRIALS,\n",
        "    executions_per_trial=EXECUTIONS_PER_TRIAL,\n",
        "    directory='test_dir', \n",
        "    project_name='tune_optimizer',\n",
        "    seed=RANDOM_SEED\n",
        ")\n",
        "\n",
        "tuner.search_space_summary()"
      ],
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Reloading Oracle from test_dir/tune_optimizer/oracle.json\n",
            "INFO:tensorflow:Reloading Tuner from test_dir/tune_optimizer/tuner0.json\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Search space summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Default search space size: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">optimizer (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: adam</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: False</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: ['adam', 'sgd', 'rmsprop']</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "kVmHdiR3OOX5",
        "colab_type": "code",
        "outputId": "21aa77c3-b2d4-4532-8038-91a42b018878",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "TRAIN_EPOCHS = 20\n",
        "\n",
        "tuner.search(x=X_train,\n",
        "             y=y_train,\n",
        "             epochs=TRAIN_EPOCHS,\n",
        "             validation_data=(X_test, y_test))"
      ],
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "96SHxoWaOVmJ",
        "colab_type": "code",
        "outputId": "83b799ee-00e6-46f3-bcad-d241c1be686a",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 140
        }
      },
      "source": [
        "tuner.results_summary()"
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in test_dir/tune_optimizer</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7519553303718567</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7430167198181152</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7273743152618408</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wx_mjZMbdk2Y",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "64362b56-d84f-4a85-89cb-9dc569df3d1c"
      },
      "source": [
        "tuner.oracle.get_best_trials(num_trials=1)[0].hyperparameters.values"
      ],
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'optimizer': 'adam'}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 22
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ali5UfvsfBCi",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "best_model = tuner.get_best_models()[0]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yiL8XZn_fCo6",
        "colab_type": "code",
        "outputId": "824c86a1-bb31-49b6-ee38-991a7a28025f",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 221
        }
      },
      "source": [
        "best_model.summary()"
      ],
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"sequential_1\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "dense_2 (Dense)              (None, 18)                234       \n",
            "_________________________________________________________________\n",
            "dense_3 (Dense)              (None, 1)                 19        \n",
            "=================================================================\n",
            "Total params: 253\n",
            "Trainable params: 253\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "9djpCxAAV68R",
        "colab_type": "text"
      },
      "source": [
        "## Learning rate and Momentum"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qUVT39kDPpWV",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def tune_rl_momentum_model(hp):\n",
        "    model = keras.Sequential()\n",
        "    model.add(keras.layers.Dense(units=18, activation=\"relu\", input_shape=[X_train.shape[1]]))\n",
        "\n",
        "    model.add(keras.layers.Dense(1, activation='sigmoid'))\n",
        "\n",
        "    lr = hp.Choice('learning_rate', [1e-2, 1e-3, 1e-4])\n",
        "    momentum = hp.Choice('momentum', [0.0, 0.2, 0.4, 0.6, 0.8, 0.9])\n",
        "\n",
        "    model.compile(\n",
        "        optimizer=keras.optimizers.SGD(lr, momentum=momentum),\n",
        "        loss = 'binary_crossentropy', \n",
        "        metrics = ['accuracy'])\n",
        "    return model"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LXEoZn_w2Qam",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def create_random_tuner(model_builder, project_name):\n",
        "  tuner = RandomSearch(\n",
        "    model_builder,\n",
        "    objective='val_accuracy',\n",
        "    max_trials=MAX_TRIALS,\n",
        "    executions_per_trial=EXECUTIONS_PER_TRIAL,\n",
        "    directory='test_dir', \n",
        "    project_name=project_name,\n",
        "    seed=RANDOM_SEED\n",
        "  )\n",
        "\n",
        "  tuner.search_space_summary()\n",
        "  return tuner"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "IL2mpWP3eyyO",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def random_search_params(model_builder, project_name):\n",
        "  tuner = create_random_tuner(model_builder, project_name)\n",
        "  tuner.search(x=X_train,\n",
        "             y=y_train,\n",
        "             epochs=TRAIN_EPOCHS,\n",
        "             validation_data=(X_test, y_test))\n",
        "  \n",
        "  tuner.results_summary()\n",
        "\n",
        "  pprint(tuner.oracle.get_best_trials(num_trials=1)[0].hyperparameters.values)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "qLfc4H3AWhSS",
        "colab_type": "code",
        "outputId": "0bb9a74d-4d28-48db-8b04-1219f5156c6b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 557
        }
      },
      "source": [
        "random_search_params(tune_rl_momentum_model, project_name=\"tune_lr_momentum\")"
      ],
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Reloading Oracle from test_dir/tune_lr_momentum/oracle.json\n",
            "INFO:tensorflow:Reloading Tuner from test_dir/tune_lr_momentum/tuner0.json\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Search space summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Default search space size: 2</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">learning_rate (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.01</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.01, 0.001, 0.0001]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">momentum (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.2, 0.4, 0.6, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in test_dir/tune_lr_momentum</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7743016481399536</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7720670700073242</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7709497213363647</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7675977945327759</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7597764730453491</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7575419545173645</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7575418949127197</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.756424605846405</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7541899681091309</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7441340684890747</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "{'learning_rate': 0.01, 'momentum': 0.4}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WGbaajYrcW_N",
        "colab_type": "text"
      },
      "source": [
        "# Number of parameters"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YNiI9XKL3ot8",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def tune_neurons_model(hp):\n",
        "    model = keras.Sequential()\n",
        "    model.add(keras.layers.Dense(units=hp.Int('units',\n",
        "                                        min_value=8,\n",
        "                                        max_value=128,\n",
        "                                        step=16),\n",
        "                                 activation=\"relu\", \n",
        "                                 input_shape=[X_train.shape[1]]))\n",
        "\n",
        "    model.add(keras.layers.Dense(1, activation='sigmoid'))\n",
        "\n",
        "    model.compile(\n",
        "        optimizer=\"adam\",\n",
        "        loss = 'binary_crossentropy', \n",
        "        metrics = ['accuracy'])\n",
        "    return model"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "SQxs8Zvx4SZf",
        "colab_type": "code",
        "outputId": "b508fb8a-5b3e-4da1-888c-64228bdd59d2",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 469
        }
      },
      "source": [
        "random_search_params(tune_neurons_model, project_name=\"tune_neurons\")"
      ],
      "execution_count": 30,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Reloading Oracle from test_dir/tune_neurons/oracle.json\n",
            "INFO:tensorflow:Reloading Tuner from test_dir/tune_neurons/tuner0.json\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Search space summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Default search space size: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 128</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 16</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in test_dir/tune_neurons</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8268156051635742</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8256982564926147</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.821229100227356</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8178771138191223</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8156424760818481</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8122904896736145</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7932960391044617</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7385475039482117</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "{'units': 72}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gk5IcyZZcYmL",
        "colab_type": "text"
      },
      "source": [
        "# Number of hidden layers"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0Sk5IK2YbAJM",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def tune_layers_model(hp):\n",
        "    model = keras.Sequential()\n",
        "\n",
        "    model.add(keras.layers.Dense(units=128,\n",
        "                                 activation=\"relu\", \n",
        "                                 input_shape=[X_train.shape[1]]))\n",
        "\n",
        "    for i in range(hp.Int('num_layers', 1, 6)):\n",
        "      model.add(keras.layers.Dense(units=hp.Int('units_' + str(i),\n",
        "                                            min_value=8,\n",
        "                                            max_value=64,\n",
        "                                            step=8),\n",
        "                               activation='relu'))\n",
        "\n",
        "    model.add(keras.layers.Dense(1, activation='sigmoid'))\n",
        "\n",
        "    model.compile(\n",
        "        optimizer=\"adam\",\n",
        "        loss = 'binary_crossentropy', \n",
        "        metrics = ['accuracy'])\n",
        "    return model"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "w_sFshyibNOd",
        "colab_type": "code",
        "outputId": "ddd1a88c-7109-46cf-a60c-ad6656aed1bf",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "source": [
        "random_search_params(tune_layers_model, project_name=\"tune_layers\")"
      ],
      "execution_count": 32,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Reloading Oracle from test_dir/tune_layers/oracle.json\n",
            "INFO:tensorflow:Reloading Tuner from test_dir/tune_layers/tuner0.json\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Search space summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Default search space size: 7</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">num_layers (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 6</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_0 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_1 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_2 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_3 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_4 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_5 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in test_dir/tune_layers</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8201117515563965</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.818994402885437</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.818994402885437</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8167597651481628</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8167597651481628</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8167597651481628</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8167597651481628</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8156424760818481</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8145251274108887</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8134077787399292</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "{'num_layers': 2,\n",
            " 'units_0': 32,\n",
            " 'units_1': 24,\n",
            " 'units_2': 64,\n",
            " 'units_3': 8,\n",
            " 'units_4': 48,\n",
            " 'units_5': 64}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "n9Nm3CJEbLTy",
        "colab_type": "text"
      },
      "source": [
        "# Weight initialization"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "2ZSe5GSNc4Nx",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def tune_weight_init_model(hp):\n",
        "    model = keras.Sequential()\n",
        "\n",
        "    weight_init = hp.Choice('weight_init', \n",
        "                            ['uniform', 'lecun_uniform', 'normal', 'zero', 'glorot_normal', 'glorot_uniform', 'he_normal', 'he_uniform'])\n",
        "\n",
        "    model.add(keras.layers.Dense(units=32,\n",
        "                                 activation=\"relu\",\n",
        "                                 kernel_initializer=weight_init,\n",
        "                                 input_shape=[X_train.shape[1]]))\n",
        "\n",
        "    model.add(keras.layers.Dense(1, activation='sigmoid'))\n",
        "\n",
        "    model.compile(\n",
        "        optimizer=\"adam\",\n",
        "        loss = 'binary_crossentropy', \n",
        "        metrics = ['accuracy'])\n",
        "    return model"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sf8BJC21dnqR",
        "colab_type": "code",
        "outputId": "ccea6f39-d6a0-4c86-e73e-5260cefc8c77",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 435
        }
      },
      "source": [
        "random_search_params(tune_weight_init_model, project_name=\"tune_weight_init\")"
      ],
      "execution_count": 34,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Reloading Oracle from test_dir/tune_weight_init/oracle.json\n",
            "INFO:tensorflow:Reloading Tuner from test_dir/tune_weight_init/tuner0.json\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Search space summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Default search space size: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">weight_init (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: uniform</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: False</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: ['uniform', 'lecun_uniform', 'normal', 'zero', 'glorot_normal', 'glorot_uniform', 'he_normal', 'he_uniform']</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in test_dir/tune_weight_init</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8234637379646301</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8223463892936707</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8167597651481628</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8145251274108887</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8067038655281067</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8055866360664368</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8033519983291626</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.5865921974182129</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "{'weight_init': 'lecun_uniform'}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3RdadQlBbDQ5",
        "colab_type": "text"
      },
      "source": [
        "# Activation function"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jO7eMq4AeiO2",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def tune_act_model(hp):\n",
        "    model = keras.Sequential()\n",
        "\n",
        "    activation = hp.Choice('activation', \n",
        "                            ['softmax', 'softplus', 'softsign', 'relu', 'tanh', 'sigmoid', 'hard_sigmoid', 'linear'])\n",
        "\n",
        "    model.add(keras.layers.Dense(units=32,\n",
        "                                 activation=activation,\n",
        "                                 input_shape=[X_train.shape[1]]))\n",
        "\n",
        "    model.add(keras.layers.Dense(1, activation='sigmoid'))\n",
        "\n",
        "    model.compile(\n",
        "        optimizer=\"adam\",\n",
        "        loss = 'binary_crossentropy', \n",
        "        metrics = ['accuracy'])\n",
        "    return model"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "uZw1nimGfNaF",
        "colab_type": "code",
        "outputId": "2727b42a-3814-4978-8fc9-702fcd44291a",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 435
        }
      },
      "source": [
        "random_search_params(tune_act_model, \"tune_activation\")"
      ],
      "execution_count": 36,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Reloading Oracle from test_dir/tune_activation/oracle.json\n",
            "INFO:tensorflow:Reloading Tuner from test_dir/tune_activation/tuner0.json\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Search space summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Default search space size: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">activation (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: softmax</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: False</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: ['softmax', 'softplus', 'softsign', 'relu', 'tanh', 'sigmoid', 'hard_sigmoid', 'linear']</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in test_dir/tune_activation</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8134077787399292</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.811173141002655</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8100558519363403</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7966480255126953</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7854748368263245</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7731843590736389</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7642458081245422</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.737430214881897</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "{'activation': 'linear'}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Rz76tYGybIrC",
        "colab_type": "text"
      },
      "source": [
        "# Dropout rate"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "V8e5E3K8hNw2",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def tune_dropout_model(hp):\n",
        "    model = keras.Sequential()\n",
        "\n",
        "    drop_rate = hp.Choice('drop_rate', \n",
        "                            [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])\n",
        "\n",
        "    model.add(keras.layers.Dense(units=32,\n",
        "                                 activation=\"relu\",\n",
        "                                 input_shape=[X_train.shape[1]]))\n",
        "    model.add(keras.layers.Dropout(rate=drop_rate))\n",
        "\n",
        "    model.add(keras.layers.Dense(1, activation='sigmoid'))\n",
        "\n",
        "    model.compile(\n",
        "        optimizer=\"adam\",\n",
        "        loss = 'binary_crossentropy', \n",
        "        metrics = ['accuracy'])\n",
        "    return model"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "RBylw9Qjhb0V",
        "colab_type": "code",
        "outputId": "c5bf45a1-e275-4d62-9726-a9f2a8284531",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 469
        }
      },
      "source": [
        "random_search_params(tune_dropout_model, \"tune_dropout\")"
      ],
      "execution_count": 38,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Reloading Oracle from test_dir/tune_dropout/oracle.json\n",
            "INFO:tensorflow:Reloading Tuner from test_dir/tune_dropout/tuner0.json\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Search space summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Default search space size: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in test_dir/tune_dropout</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7977653741836548</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.792178750038147</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7899441123008728</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7731842994689941</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7709497213363647</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7586592435836792</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7586592435836792</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7564245462417603</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7262569665908813</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.6469273567199707</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "{'drop_rate': 0.0}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "VhGzO9ludRmE",
        "colab_type": "text"
      },
      "source": [
        "# Complete example"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3afYrIljlLOm",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def tune_nn_model(hp):\n",
        "    model = keras.Sequential()\n",
        "\n",
        "    model.add(keras.layers.Dense(units=128,\n",
        "                                 activation=\"relu\", \n",
        "                                 input_shape=[X_train.shape[1]]))\n",
        "\n",
        "    for i in range(hp.Int('num_layers', 1, 6)):\n",
        "      units = hp.Int(\n",
        "          'units_' + str(i), \n",
        "          min_value=8,\n",
        "          max_value=64,\n",
        "          step=8\n",
        "      )\n",
        "      model.add(keras.layers.Dense(units=units, activation='relu'))\n",
        "      drop_rate = hp.Choice('drop_rate_' + str(i), \n",
        "                            [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9])\n",
        "      model.add(keras.layers.Dropout(rate=drop_rate))\n",
        "\n",
        "    model.add(keras.layers.Dense(1, activation='sigmoid'))\n",
        "\n",
        "    model.compile(\n",
        "        optimizer=\"adam\",\n",
        "        loss = 'binary_crossentropy', \n",
        "        metrics = ['accuracy'])\n",
        "    return model"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8L080nqZltMp",
        "colab_type": "code",
        "outputId": "3438b4e3-468d-430a-b262-9d26fe621826",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "source": [
        "random_search_params(tune_nn_model, \"tune_nn\")"
      ],
      "execution_count": 40,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Reloading Oracle from test_dir/tune_nn/oracle.json\n",
            "INFO:tensorflow:Reloading Tuner from test_dir/tune_nn/tuner0.json\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Search space summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Default search space size: 13</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">num_layers (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 6</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_0 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_0 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_1 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_1 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_2 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_2 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_3 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_3 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_4 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_4 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_5 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_5 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in test_dir/tune_nn</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8167597651481628</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8167597651481628</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8122904896736145</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8122904896736145</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8033519983291626</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7642458081245422</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7039106488227844</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7039105892181396</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.6793295741081238</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.6368714570999146</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "{'drop_rate_0': 0.1,\n",
            " 'drop_rate_1': 0.6,\n",
            " 'drop_rate_2': 0.8,\n",
            " 'drop_rate_3': 0.8,\n",
            " 'drop_rate_4': 0.9,\n",
            " 'drop_rate_5': 0.2,\n",
            " 'num_layers': 1,\n",
            " 'units_0': 56,\n",
            " 'units_1': 56,\n",
            " 'units_2': 8,\n",
            " 'units_3': 40,\n",
            " 'units_4': 56,\n",
            " 'units_5': 56}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vCHPDzk1dTZk",
        "colab_type": "text"
      },
      "source": [
        "# Bayesian Tuner"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "pWeq1HoGbHC9",
        "colab_type": "code",
        "outputId": "6b4e82c0-a839-4222-ed67-256460aedd66",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        }
      },
      "source": [
        "b_tuner = BayesianOptimization(\n",
        "    tune_nn_model,\n",
        "    objective='val_accuracy',\n",
        "    max_trials=MAX_TRIALS,\n",
        "    executions_per_trial=EXECUTIONS_PER_TRIAL,\n",
        "    directory='test_dir', \n",
        "    project_name='b_tune_nn',\n",
        "    seed=RANDOM_SEED\n",
        ")\n",
        "\n",
        "b_tuner.search_space_summary()"
      ],
      "execution_count": 41,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Reloading Oracle from test_dir/b_tune_nn/oracle.json\n",
            "INFO:tensorflow:Reloading Tuner from test_dir/b_tune_nn/tuner0.json\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Search space summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Default search space size: 13</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">num_layers (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 6</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 1</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_0 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_0 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_1 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_1 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_2 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_2 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_3 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_3 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_4 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_4 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">units_5 (Int)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-max_value: 64</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-min_value: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-sampling: None</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-step: 8</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#7E57C2\"><h2 style=\"font-size:16px\">drop_rate_5 (Choice)</h2></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-default: 0.0</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:blue\"> |-ordered: True</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-values: [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "g5nmiGvUtbBR",
        "colab_type": "code",
        "outputId": "f14f84b2-ab50-448f-f41e-7cd84dcb48ba",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 497
        }
      },
      "source": [
        "b_tuner.search(x=X_train,\n",
        "             y=y_train,\n",
        "             epochs=TRAIN_EPOCHS,\n",
        "             validation_data=(X_test, y_test))\n",
        "  \n",
        "b_tuner.results_summary()\n",
        "\n",
        "pprint(b_tuner.oracle.get_best_trials(num_trials=1)[0].hyperparameters.values)"
      ],
      "execution_count": 42,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in test_dir/b_tune_nn</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8167597651481628</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8067039251327515</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.8044692873954773</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7966480851173401</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7832401990890503</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.74301677942276</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7206704020500183</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.7150837779045105</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.694972038269043</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='val_accuracy', direction='max') Score: 0.6636871695518494</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "stream",
          "text": [
            "{'drop_rate_0': 0.1,\n",
            " 'drop_rate_1': 0.3,\n",
            " 'drop_rate_2': 0.8,\n",
            " 'drop_rate_3': 0.2,\n",
            " 'drop_rate_4': 0.2,\n",
            " 'drop_rate_5': 0.2,\n",
            " 'num_layers': 2,\n",
            " 'units_0': 24,\n",
            " 'units_1': 56,\n",
            " 'units_2': 16,\n",
            " 'units_3': 64,\n",
            " 'units_4': 64,\n",
            " 'units_5': 32}\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vmulnJwTvNY3",
        "colab_type": "text"
      },
      "source": [
        "# Scikit-learn"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "VDVWT-7QuMJh",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import kerastuner as kt\n",
        "from sklearn import ensemble\n",
        "from sklearn import metrics\n",
        "from sklearn import datasets\n",
        "from sklearn import model_selection"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "rOeIl7qovSog",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 51
        },
        "outputId": "fbb96cff-2d23-418c-88cc-0ae57d4f97ba"
      },
      "source": [
        "def build_tree_model(hp):      \n",
        "  return ensemble.RandomForestClassifier(\n",
        "      n_estimators=hp.Int('n_estimators', 10, 80, step=5),\n",
        "      max_depth=hp.Int('max_depth', 3, 10, step=1),\n",
        "      max_features=hp.Choice('max_features', ['auto', 'sqrt', 'log2'])\n",
        "  )\n",
        "\n",
        "sk_tuner = kt.tuners.Sklearn(\n",
        "  oracle=kt.oracles.BayesianOptimization(\n",
        "      objective=kt.Objective('score', 'max'),\n",
        "      max_trials=MAX_TRIALS,\n",
        "      seed=RANDOM_SEED\n",
        "  ),\n",
        "  hypermodel=build_tree_model,\n",
        "  scoring=metrics.make_scorer(metrics.accuracy_score),\n",
        "  cv=model_selection.StratifiedKFold(5),\n",
        "  directory='test_dir',\n",
        "  project_name='tune_rf'\n",
        ")"
      ],
      "execution_count": 44,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Reloading Oracle from test_dir/tune_rf/oracle.json\n",
            "INFO:tensorflow:Reloading Tuner from test_dir/tune_rf/tuner0.json\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MDUAFESvvqE7",
        "colab_type": "code",
        "outputId": "15cd4042-2e1c-443f-8b07-dfd9bc9911b6",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "sk_tuner.search(X_train.values, y_train.values)"
      ],
      "execution_count": 45,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Oracle triggered exit\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "UJTs0SUV4d8q",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 259
        },
        "outputId": "ad3af44e-7b0a-4fc0-b252-c7c280157597"
      },
      "source": [
        "sk_tuner.results_summary()"
      ],
      "execution_count": 47,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:#4527A0\"><h1 style=\"font-size:18px\">Results summary</h1></span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Results in test_dir/tune_rf</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Showing 10 best trials</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='score', direction='max') Score: 0.8258713317448709</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='score', direction='max') Score: 0.8244628810406456</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='score', direction='max') Score: 0.8216359906201081</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='score', direction='max') Score: 0.8216358509136453</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='score', direction='max') Score: 0.8202275399158827</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='score', direction='max') Score: 0.8201878632804614</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='score', direction='max') Score: 0.8188883137639505</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='score', direction='max') Score: 0.8188487768349921</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='score', direction='max') Score: 0.8188287988108186</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        },
        {
          "output_type": "display_data",
          "data": {
            "text/html": [
              "<span style=\"color:cyan\"> |-Objective: Objective(name='score', direction='max') Score: 0.8188287988108186</span>"
            ],
            "text/plain": [
              "<IPython.core.display.HTML object>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "u2bfgrNawVbW",
        "colab_type": "code",
        "outputId": "71a09c0b-538a-4ea3-fd1e-936f30d7eec9",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "pprint(sk_tuner.oracle.get_best_trials(num_trials=1)[0].hyperparameters.values)"
      ],
      "execution_count": 46,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "{'max_depth': 4, 'max_features': 'sqrt', 'n_estimators': 60}\n"
          ],
          "name": "stdout"
        }
      ]
    }
  ]
}